LRE
Sign In
Sign Up
Sign In
Sign Up
Manage this list
×
Keyboard Shortcuts
Thread View
j
: Next unread message
k
: Previous unread message
j a
: Jump to all threads
j l
: Jump to MailingList overview
2024
December
November
October
September
August
July
June
May
April
March
February
January
2023
December
November
October
September
August
July
June
May
April
March
February
January
2022
December
November
October
September
August
July
June
May
April
March
February
January
2021
December
November
October
September
August
July
June
May
April
March
February
January
2020
December
November
October
September
August
July
June
May
April
March
February
January
2019
December
November
October
September
August
July
June
May
April
March
February
January
2018
December
November
October
September
August
July
June
May
April
March
February
January
2017
December
November
October
September
August
July
June
May
April
March
February
January
2016
December
November
October
September
August
July
June
May
April
March
February
January
2015
December
November
October
September
August
July
June
May
April
March
February
January
2014
December
November
October
September
August
July
June
May
April
March
February
January
2013
December
November
October
September
August
July
June
May
April
March
February
January
2012
December
November
October
September
August
July
June
May
April
March
February
January
2011
December
November
October
September
August
July
June
May
April
March
February
January
2010
December
November
October
September
August
July
June
May
April
March
February
January
2009
December
November
October
September
August
July
June
May
April
March
February
January
2008
December
November
October
September
August
July
June
May
April
March
February
January
2007
December
November
October
September
August
July
June
May
April
March
February
January
2006
December
November
October
September
August
July
June
May
April
March
February
January
2005
December
November
October
September
August
July
June
May
April
March
February
January
2004
December
November
October
September
August
July
June
May
April
March
List overview
Download
Olena-patches
September 2011
----- 2024 -----
December 2024
November 2024
October 2024
September 2024
August 2024
July 2024
June 2024
May 2024
April 2024
March 2024
February 2024
January 2024
----- 2023 -----
December 2023
November 2023
October 2023
September 2023
August 2023
July 2023
June 2023
May 2023
April 2023
March 2023
February 2023
January 2023
----- 2022 -----
December 2022
November 2022
October 2022
September 2022
August 2022
July 2022
June 2022
May 2022
April 2022
March 2022
February 2022
January 2022
----- 2021 -----
December 2021
November 2021
October 2021
September 2021
August 2021
July 2021
June 2021
May 2021
April 2021
March 2021
February 2021
January 2021
----- 2020 -----
December 2020
November 2020
October 2020
September 2020
August 2020
July 2020
June 2020
May 2020
April 2020
March 2020
February 2020
January 2020
----- 2019 -----
December 2019
November 2019
October 2019
September 2019
August 2019
July 2019
June 2019
May 2019
April 2019
March 2019
February 2019
January 2019
----- 2018 -----
December 2018
November 2018
October 2018
September 2018
August 2018
July 2018
June 2018
May 2018
April 2018
March 2018
February 2018
January 2018
----- 2017 -----
December 2017
November 2017
October 2017
September 2017
August 2017
July 2017
June 2017
May 2017
April 2017
March 2017
February 2017
January 2017
----- 2016 -----
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
----- 2015 -----
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
----- 2014 -----
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
----- 2013 -----
December 2013
November 2013
October 2013
September 2013
August 2013
July 2013
June 2013
May 2013
April 2013
March 2013
February 2013
January 2013
----- 2012 -----
December 2012
November 2012
October 2012
September 2012
August 2012
July 2012
June 2012
May 2012
April 2012
March 2012
February 2012
January 2012
----- 2011 -----
December 2011
November 2011
October 2011
September 2011
August 2011
July 2011
June 2011
May 2011
April 2011
March 2011
February 2011
January 2011
----- 2010 -----
December 2010
November 2010
October 2010
September 2010
August 2010
July 2010
June 2010
May 2010
April 2010
March 2010
February 2010
January 2010
----- 2009 -----
December 2009
November 2009
October 2009
September 2009
August 2009
July 2009
June 2009
May 2009
April 2009
March 2009
February 2009
January 2009
----- 2008 -----
December 2008
November 2008
October 2008
September 2008
August 2008
July 2008
June 2008
May 2008
April 2008
March 2008
February 2008
January 2008
----- 2007 -----
December 2007
November 2007
October 2007
September 2007
August 2007
July 2007
June 2007
May 2007
April 2007
March 2007
February 2007
January 2007
----- 2006 -----
December 2006
November 2006
October 2006
September 2006
August 2006
July 2006
June 2006
May 2006
April 2006
March 2006
February 2006
January 2006
----- 2005 -----
December 2005
November 2005
October 2005
September 2005
August 2005
July 2005
June 2005
May 2005
April 2005
March 2005
February 2005
January 2005
----- 2004 -----
December 2004
November 2004
October 2004
September 2004
August 2004
July 2004
June 2004
May 2004
April 2004
March 2004
olena-patches@lrde.epita.fr
7 participants
173 discussions
Start a n
N
ew thread
last-svn-commit-889-gf4a851e Correct some problems with lines detection and improve paragraphs detection. Add remote debug for clean.hh
by Raphael Boissel
--- .../code/my/debug/remote/document_remote.hh | 146 ++++++++++++++++++++ scribo/sandbox/raphael/code/my/debug/remote/lib.hh | 34 +++++ scribo/sandbox/raphael/code/my/document/clean.hh | 139 +++++++++++++++++-- .../sandbox/raphael/code/my/document/document.hh | 140 ++++++++++++++++++- .../sandbox/raphael/code/my/document/separator.hh | 45 ++++++- scribo/sandbox/raphael/code/my/runtime/lib.hh | 6 + scribo/sandbox/raphael/code/test.cc | 37 +++++- 7 files changed, 523 insertions(+), 24 deletions(-) create mode 100644 scribo/sandbox/raphael/code/my/debug/remote/document_remote.hh create mode 100644 scribo/sandbox/raphael/code/my/debug/remote/lib.hh diff --git a/scribo/sandbox/raphael/code/my/debug/remote/document_remote.hh b/scribo/sandbox/raphael/code/my/debug/remote/document_remote.hh new file mode 100644 index 0000000..24b0889 --- /dev/null +++ b/scribo/sandbox/raphael/code/my/debug/remote/document_remote.hh @@ -0,0 +1,146 @@ +#ifndef MLN_DEBUG_DOCUMENT_REMOTE +#define MLN_DEBUG_DOCUMENT_REMOTE +#include <my/document/document.hh> +using namespace mln; +namespace mymln +{ + namespace document + { + namespace debug + { + template<typename Label, typename Float, typename Data> + class remote + { + typedef document< Label, Float, Data > doc; + public: + remote() + { + program_node = mln::util::array<string>(0); + program_argument = mln::util::array<string>(0); + program_argument2 = mln::util::array<string>(0); + program_instruction = mln::util::array<string>(0); + doc_b_pp_fun = map<string, bool(*)(const doc&, const point2d&, const point2d&) >(); + doc_b_p_fun = map<string, bool(*)(const doc&, const point2d&) >(); + } + void load(const char* file) + { + + fstream filestream(file, fstream::in | fstream::out); + std::string Buffer = ""; + bool flag = !getline(filestream, Buffer).eof(); + int L = 0; + bool remain = flag; + bool fun_mask_set = false; + + while(remain) + { + if(!flag){remain = false;} + int N = 0; + std::string Node = ""; + std::string Instr = ""; + std::string Arg = ""; + std::string Arg2 = ""; + while( N < Buffer.length() && (Buffer[N] == ' ' || Buffer[N] == '\t') && Buffer[N] != ';'){N++;} // trim + while(N < Buffer.length() && Buffer[N] != ' ' && Buffer[N] != '\t' && Buffer[N] != ';' && Buffer[N] != ':'){Instr += Buffer[N]; N++;} + if(Buffer[N] != ':') + {std::cout << "#REMOTE DEBUG SCRIPT ERROR : THE NODE HAS NOT BEEN SPECIFIED" << std::endl; return;} + while( N < Buffer.length() && (Buffer[N] == ' ' || Buffer[N] == '\t') && Buffer[N] != ';'){N++;} // trim + while(N < Buffer.length() && Buffer[N] != ' ' && Buffer[N] != '\t' && Buffer[N] != ';'){Instr += Buffer[N]; N++;} + while(N < Buffer.length() && (Buffer[N] == ' ' || Buffer[N] == '\t') && Buffer[N] != ';'){N++;} // trim + while(N < Buffer.length() && Buffer[N] != ' ' && Buffer[N] != '\t' && Buffer[N] != ';'){Arg += Buffer[N]; N++;} + while(N < Buffer.length() && (Buffer[N] == ' ' || Buffer[N] == '\t') && Buffer[N] != ';'){N++;} // trim + while(N < Buffer.length() && Buffer[N] != ' ' && Buffer[N] != '\t' && Buffer[N] != ';'){Arg2 += Buffer[N]; N++;} + if(Instr.length() != 1 || (Instr[0] != 'v' && Instr[0] != 'q')) + { + if(Instr.length() != 2 || (Instr[0] != 'v' && Instr[0] != 'q') || (Instr[1] != 'v' && Instr[1] != 'q')) + { + if(fun_mask_set) + { + std::cout << "#REMOTE DEBUG SCRIPT ERROR : INVALID NODE" << std::endl; return; + } + else + { + fun_mask_set = true; + fun_mask = Node; + } + } + } + program_node.append(Node); + program_instruction.append(Instr); + program_argument.append(Arg); + program_argument2.append(Arg2); + + } + + filestream.close(); + + } + inline void filter(doc& d) + { + typedef vertex_image<point2d,bool> v_ima_g; + typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; + v_ima_g mask = + (!fun_mask.compare("all_letters"))?d.fun_mask_all_letters() + :(!fun_mask.compare("letters"))?d.fun_mask_letters() + :(!fun_mask.compare("alone_letters"))?d.fun_mask_letters() + :(!fun_mask.compare("start_end_lines"))?d.fun_mask_start_end_lines() + :(!fun_mask.compare("start_lines"))?d.fun_mask_start_lines() + :(!fun_mask.compare("end_lines"))?d.fun_mask_start_lines() + :(!fun_mask.compare("all"))?d.fun_mask_all() + :d.fun_mask_all(); // DEFAULT VALUE + + + mln_piter_(v_ima_g) v(mask.domain()); + typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t; + nbh_t nbh(mask); + mln_niter_(nbh_t) q(nbh, v); + for_all(v) + { + bool _VTRUE = true; + for(int N = 0; N < program_instruction.size(); N++) + { + if(!program_node[N].compare("v")) + { _VTRUE = _VTRUE && doc_b_p_fun[program_instruction[N]](d, q); } + } + if(!_VTRUE){continue;} + for_all(q) + { + bool _TRUE = true; + for(int N = 0; N < program_instruction.size(); N++) + { + if(!program_node[N].compare("vq")) + { _TRUE = _TRUE && doc_b_pp_fun[program_instruction[N]](d, v, q); } + else if(!program_node[N].compare("qv")) + { _TRUE = _TRUE && doc_b_pp_fun[program_instruction[N]](d, (point2d)q, v); } + else if(!program_node[N].compare("q")) + { _TRUE = _TRUE && doc_b_p_fun[program_instruction[N]](d, (point2d)q); } + } + + if(_TRUE) + {d.debug_draw_line_green_buffer(q,v);} + else + {d.debug_draw_line_red_buffer(q,v);} + } + } + } + inline void add_function_pp(string name, bool(*ptr)(const doc&, const point2d&, const point2d&) ) + { + doc_b_pp_fun[name] = ptr; + } + inline void add_function_p(string name, bool(*ptr)(const doc&, const point2d&) ) + { + doc_b_p_fun[name] = ptr; + } + private: + map<string, bool(*)(const doc&, const point2d&, const point2d&) > doc_b_pp_fun; + map<string, bool(*)(const doc&, const point2d&) > doc_b_p_fun; + mln::util::array<std::string> program_node; + mln::util::array<std::string> program_instruction; + mln::util::array<std::string> program_argument; + mln::util::array<std::string> program_argument2; + std::string fun_mask; + }; + } + } +} +#endif \ No newline at end of file diff --git a/scribo/sandbox/raphael/code/my/debug/remote/lib.hh b/scribo/sandbox/raphael/code/my/debug/remote/lib.hh new file mode 100644 index 0000000..97db857 --- /dev/null +++ b/scribo/sandbox/raphael/code/my/debug/remote/lib.hh @@ -0,0 +1,34 @@ +#ifndef MLN_DEBUG_DOCUMENT_REMOTE_LIB +#define MLN_DEBUG_DOCUMENT_REMOTE_LIB +#include <my/debug/remote/document_remote.hh> +using namespace mln; +namespace mymln +{ + namespace document + { + namespace debug + { + + template<typename L, typename F, typename D> + bool allign_V(const document<L,F,D>& doc, const point2d& A,const point2d& B){return doc.allign_V(A,B);} + template<typename L, typename F, typename D> + bool allign_V_line(const document<L,F,D>& doc, const point2d& A,const point2d& B){return doc.allign_V_line(A,B);} + template<typename L, typename F, typename D> + bool allign_V_line_strict(const document<L,F,D>& doc, const point2d& A,const point2d& B){return doc.allign_V_line_strict(A,B);} + template<typename L, typename F, typename D> + bool allign_V_large(const document<L,F,D>& doc, const point2d& A,const point2d& B){return doc.allign_V_large(A,B);} + + + template<typename L, typename F, typename D> + void load(const remote<L,F,D>& rem) + { + typedef document< L, F, D > doc; + rem.add_function_pp("allign_V_large", &(allign_V_large)); + rem.add_function_pp("allign_V_line_strict", &(allign_V_line_strict)); + rem.add_function_pp("allign_V_line", &(allign_V_line)); + rem.add_function_pp("allign_V", &(allign_V)); + } + } + } +} +#endif \ No newline at end of file diff --git a/scribo/sandbox/raphael/code/my/document/clean.hh b/scribo/sandbox/raphael/code/my/document/clean.hh index 9304dcc..cfff068 100644 --- a/scribo/sandbox/raphael/code/my/document/clean.hh +++ b/scribo/sandbox/raphael/code/my/document/clean.hh @@ -196,7 +196,20 @@ namespace mymln doc.add_to_line_link(v, q); doc.add_letter_coerce(q); } + else if( + doc.is_start_end_line(v) && + doc.allign_base_line(v, q) && + doc.allign_small_item(v,q) && + !doc.contain_alone_letter(v) && + doc.allign_proximity_large_left(v,q) && + doc.letter_ratio_YX(q) >= 1 + ) + { + doc.debug_draw_line_green_buffer(v,q); + doc.add_to_line_link(v,q); + } } + } } mask = doc.fun_mask_alone_letters(); @@ -380,9 +393,12 @@ namespace mymln { for_all(q) { - if(doc.same_line(q,v)){continue;} + + if(doc.same_line(q,v)){ continue;} + if(doc.contain_alone_letter(q)) { + if(doc.allign_V(q,v) && doc.allign_proximity_strict(q, v) && doc.allign_size_height(q, v)) { doc.add_to_line_link(v, q); @@ -391,7 +407,8 @@ namespace mymln } else if(doc.contain_line(q)) - { + { + if(doc.allign_V(q,v) && doc.allign_size_height_line_strict(q, v) && doc.allign_proximity_strict(q,v)) { doc.add_to_line_link(v, q); @@ -399,12 +416,13 @@ namespace mymln } else if(doc.allign_size_height_line(q,v)) { + if(doc.allign_proximity_line(q,v) && doc.allign_V_line_strict(q, v)) { doc.add_to_line_link(v, q); doc.debug_draw_line_green_buffer(v,q); } - else if(doc.line_influence_reciprocal(q, v) && doc.allign_V_line_strict(q, v)) + else if(doc.line_influence_reciprocal(q, v) && doc.allign_V_line_strict(q, v) && doc.allign_size_height_line(q,v)) { doc.add_to_line_link(v, q); doc.debug_draw_line_red_buffer(v,q); @@ -419,15 +437,22 @@ namespace mymln doc.allign_proximity_line(v,q) ) { - doc.debug_draw_line_orange_buffer(v,q); doc.debug_draw_box_red_buffer(v); doc.debug_draw_box_green_buffer(q); doc.add_to_line_link(v, q); } + + else if(doc.allign_V(q,v) && doc.allign_proximity_strict(q,v)) + { + doc.debug_draw_line_orange_buffer(q,v); + doc.add_to_line_link(v, q); + } } + } + } } } @@ -491,7 +516,7 @@ namespace mymln { if( doc.allign_H_large(q,v) && - doc.allign_size_height_line(q, v) && + doc.allign_size_height_line_medium(q, v) && doc.allign_proximity_V_line(v,q) && doc.allign_size_width_line(q, v) ) @@ -506,7 +531,7 @@ namespace mymln doc.add_to_paragraph(q); doc.add_to_paragraph_link(v, q); } - + doc.debug_draw_line_red_buffer(v,q); } } } @@ -518,7 +543,7 @@ namespace mymln if( doc.get_beginning_of_line(q) == doc[q] && doc.allign_H_large(q,v) && - doc.allign_size_height_line(q, v) && + doc.allign_size_height_line_medium(q, v) && doc.allign_size_width_line(q, v) && doc.allign_proximity_V_line(v,q) && doc.allign_bottom_line(q,v) @@ -546,7 +571,11 @@ namespace mymln } doc.add_to_paragraph(q); doc.add_to_paragraph_link(v, q); + + } + + doc.debug_draw_line_green_buffer(v,q); } } @@ -829,9 +858,10 @@ namespace mymln { doc.add_noise(KillMe[Killer]); doc.kill(KillMe[Killer]); + doc.invalidate_line_link(KillMe[Killer]); Killer++; } - + doc.propage_line_link(); } @@ -1000,7 +1030,7 @@ namespace mymln doc.return_next_line(doc.get_line_ID(v)) == doc.return_next_line(doc.get_line_ID(q)) && doc.return_previous_line(doc.get_line_ID(v)) == doc.return_previous_line(doc.get_line_ID(q)) && doc.allign_V_line(v, q) && - doc.allign_size_height_line(v, q) && + doc.allign_size_height_line_medium(v, q) && !doc.killed(doc[q]) ) { @@ -1175,15 +1205,20 @@ namespace mymln { for_all(q) { - if(doc.contain_line(q)) + if(doc.contain_line(q) && doc.same_line(q,v)) { - doc.debug_draw_line_orange_buffer(q,v); + if( + doc.letter_included_center(v,q) && doc.allign_small_item(v,q)) + { + doc.debug_draw_line_orange_buffer(v,q); + doc.merge(q,v); + } + } } } } doc.propage_line_link(); - doc.propage_paragraph_link(); } @@ -1219,6 +1254,11 @@ namespace mymln doc.debug_draw_line_green_buffer(q,v); doc.add_to_paragraph_link(v, q); } + else if(doc.allign_paragraph_center_strict(q,v)) + { + doc.debug_draw_line_orange_buffer(q,v); + doc.add_to_paragraph_link(v, q); + } } else { @@ -1234,9 +1274,78 @@ namespace mymln } - - - + + template<typename L, typename F, typename D> + void clean_paragraphs_first_line(mymln::document::document<L,F,D>& doc) + { + typedef vertex_image<point2d,bool> v_ima_g; + typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; + v_ima_g mask = doc.fun_mask_all_letters(); + mln_piter_(v_ima_g) v(mask.domain()); + typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t; + nbh_t nbh(mask); + mln_niter_(nbh_t) q(nbh, v); + for_all(v) + { + if(doc.contain_paragraph(v) && doc.get_paragraph_length(v) > 1 && doc.contain_start_paragraph(v)) + { + for_all(q) + { + if( + doc.same_paragraph(q,v) && + !doc.same_line(q,v) && + doc.allign_left(v,q) && + doc.allign_V_line(v,q) + ) + { + doc.debug_draw_line_green_buffer(q,v); + doc.debug_draw_box_green_buffer(q); + doc.add_to_line_link(v,q); + } + } + } + } + doc.propage_line_link(); + } + + + template<typename L, typename F, typename D> + void clean_paragraphs_couple(mymln::document::document<L,F,D>& doc) + { + typedef vertex_image<point2d,bool> v_ima_g; + typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; + v_ima_g mask = doc.fun_mask_all_letters(); + mln_piter_(v_ima_g) v(mask.domain()); + typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t; + nbh_t nbh(mask); + mln_niter_(nbh_t) q(nbh, v); + for_all(v) + { + if(doc.contain_paragraph(v) && doc.get_paragraph_length(v) == 1) + { + for_all(q) + { + if( + doc.contain_paragraph(q) && + doc.get_paragraph_length(q) == 1 && + !doc.same_paragraph(q,v) && + doc.allign_proximity_paragraph_up_medium(q,v) && + doc.compatible_paragraph_middle_width(q,v) && + !doc.decal_left_paragraph(q, v) && + doc.allign_top_paragraph(q,v) && + doc.allign_size_height_paragraph_line(q,v) && + (doc.contain_start_line(q) || doc.contain_start_line(v)) && // THESE TWO LINES CONATIN MAYBE SOME ERROR + doc.allign_H_paragraph(q,v) // FIX THE PROBLEM BEFORE TO START IT + ) + { + doc.debug_draw_line_green_buffer(q,v); + doc.add_to_paragraph_link(q,v); + } + } + } + } + doc.propage_paragraph_link(); + } template<typename L, typename F, typename D> diff --git a/scribo/sandbox/raphael/code/my/document/document.hh b/scribo/sandbox/raphael/code/my/document/document.hh index 219d245..c7fc0c1 100644 --- a/scribo/sandbox/raphael/code/my/document/document.hh +++ b/scribo/sandbox/raphael/code/my/document/document.hh @@ -52,6 +52,7 @@ namespace mymln all_letters_mask = fun::i2v::array<bool>(Areas + 1); Hseparator_mask = fun::i2v::array<bool>(Areas + 1); Vseparator_mask = fun::i2v::array<bool>(Areas + 1); + image_mask = fun::i2v::array<bool>(Areas + 1); noise_mask = fun::i2v::array<bool>(Areas + 1); temp_letter = fun::i2v::array<bool>(Areas + 1); alone_letters_mask = fun::i2v::array<bool>(Areas + 1); @@ -312,6 +313,8 @@ namespace mymln inline void add_to_line_link(const point2d& A, const point2d& B) { add_to_line_link(img_influ(A), img_influ(B)); } + inline void invalidate_line_link(const point2d& A) + { invalidate_line_link(img_influ(A)); } inline bool same_line(const point2d& A, const point2d& B) { return same_line(img_influ(A), img_influ(B)); } inline bool same_line(const Label A, const Label B) @@ -362,6 +365,9 @@ namespace mymln inline void jump_to_line(const point2d& point) { jump_to_line(img_influ(point)); } + inline bool contain_start_paragraph(const point2d& point) + { return contain_start_paragraph(img_influ(point)); } + inline bool contain_start_line(const point2d& point) { return contain_start_line(img_influ(point)); } @@ -388,7 +394,8 @@ namespace mymln inline void add_to_line_link(const Label A, const Label B) {lines_union.add_link(A, B);} - + inline void invalidate_line_link(const Label A) + {lines_union.invalidate_link(A);} inline void jump_to_line(const Label lbl) { if(lines_union[lbl] != 0) @@ -451,6 +458,9 @@ namespace mymln inline bool contain_start_line(const Label lbl) { return start_lines_mask(lbl);} + inline bool contain_start_paragraph(const Label lbl) + { return paragraphs_first_line[paragraphs_union[lbl]] == lines_union[lbl];} + inline bool contain_end_line(const Label lbl) { return start_lines_mask(lbl);} @@ -487,6 +497,7 @@ namespace mymln } void inline add(Label lbl, int link) { + image_mask(lbl) = false; all_mask(lbl) = true; if (link == 0){add_noise(lbl);} else if (link > 30){ add_separator(lbl);} @@ -521,6 +532,21 @@ namespace mymln {add_letter(img_influ(point)); } void inline add_letter_coerce(const point2d& point) {add_letter_coerce(img_influ(point)); } + + + void add_image(const Label lbl) + { + image_mask(lbl) = true; + separators_mask(lbl) = false; + containers_mask(lbl) = false; + Vseparator_mask(lbl) = false; + Hseparator_mask(lbl) = false; + alone_letters_mask(lbl) = false; + noise_mask(lbl) = false; + all_letters_mask(lbl) = false; + temp_letter = false; + } + void add_alone_letter(const point2d& point) {add_alone_letter(img_influ(point));} void add_alone_letter(const Label lbl) @@ -572,6 +598,41 @@ namespace mymln else add_noise(lbl); } + inline bool is_big_element_V(const point2d& point) + {return is_big_element_V(img_influ(point));} + inline bool is_big_element_V(const Label lbl) + { + return _bboxgp[lbl].len(0) > img_influ.domain().len(0) / 13; + } + inline bool is_big_element_H(const point2d& point) + {return is_big_element_H(img_influ(point));} + inline bool is_big_element_H(const Label lbl) + { + return _bboxgp[lbl].len(1) > img_influ.domain().len(1) / 13; + } + + + + + + inline bool is_very_big_element_V(const point2d& point) + {return is_very_big_element_V(img_influ(point));} + inline bool is_very_big_element_V(const Label lbl) + { + return _bboxgp[lbl].len(0) > img_influ.domain().len(0) / 6; + } + inline bool is_very_big_element_H(const point2d& point) + {return is_very_big_element_H(img_influ(point));} + inline bool is_very_big_element_H(const Label lbl) + { + return _bboxgp[lbl].len(1) > img_influ.domain().len(1) / 6; + } + + + + + + void inline add_container(const point2d& point) {add_container(img_influ(point)); } void add_container(const Label lbl) @@ -736,6 +797,7 @@ namespace mymln return allignV < label_size_(0, Left) && (_bboxgp[Left].pcenter()[0]) > (_bboxgp[Right].pcenter()[0]); } + inline bool allign_paragraph_center(const point2d& Left, const point2d& Right) {return allign_paragraph_center(img_influ(Left), img_influ(Right));} inline bool allign_paragraph_center(const Label Left, const Label Right) @@ -744,7 +806,14 @@ namespace mymln if(Diff < 0){Diff = -Diff;} return Diff < paragraphs_bbox[paragraphs_union[Left]].len(1)/ 30 && Diff < paragraphs_bbox[paragraphs_union[Right]].len(1) / 30; } - + inline bool allign_paragraph_center_strict(const point2d& Left, const point2d& Right) + {return allign_paragraph_center_strict(img_influ(Left), img_influ(Right));} + inline bool allign_paragraph_center_strict(const Label Left, const Label Right) + { + short int Diff = paragraphs_bbox[paragraphs_union[Left]].pcenter()[1] - paragraphs_bbox[paragraphs_union[Right]].pcenter()[1]; + if(Diff < 0){Diff = -Diff;} + return Diff < paragraphs_bbox[paragraphs_union[Left]].len(1)/ 60 && Diff < paragraphs_bbox[paragraphs_union[Right]].len(1) / 60; + } inline bool allign_line_center(const point2d& Left, const point2d& Right) {return allign_line_center(img_influ(Left), img_influ(Right));} @@ -1028,10 +1097,13 @@ namespace mymln { HA = HB; } return (DisA) < HA; } + + + inline bool allign_proximity_paragraph_up_medium( const point2d& Left, const point2d& Right) - {return allign_proximity_paragraph_up(img_influ(Left), img_influ(Right));} + {return allign_proximity_paragraph_up_medium(img_influ(Left), img_influ(Right));} inline bool allign_proximity_paragraph_up_medium( const Label Left, const Label Right) { @@ -1097,6 +1169,19 @@ namespace mymln + inline bool allign_size_height_line_medium( const point2d& Left, const point2d& Right) + { + return allign_size_height_line_medium(img_influ(Left), img_influ(Right)); + } + + inline bool allign_size_height_line_medium( const Label Left, const Label Right) + { + short int SizeL = lines_bbox[lines_union[Left]].len(0); + short int SizeR = lines_bbox[lines_union[Right]].len(0); + return SizeR > (SizeL / 1.8f) && SizeR < (SizeL * 1.8f); + } + + inline bool allign_size_height_line( const point2d& Left, const point2d& Right) { return allign_size_height_line(img_influ(Left), img_influ(Right)); @@ -1288,6 +1373,35 @@ namespace mymln } + + + inline bool allign_proximity_left( const point2d& Left, const point2d& Right) + {return allign_proximity_left(img_influ(Left), img_influ(Right));} + + inline bool allign_proximity_left( const Label Left, const Label Right) + { + box2d LB = _bboxgp[Left]; + box2d RB = _bboxgp[Right]; + + int DisA = LB.pmax()[1] - RB.pmin()[1]; + int DisB = RB.pmax()[1] - LB.pmin()[1]; + if(DisA < 0){DisA = -DisA;} + if(DisB < 0){DisB = -DisB;} + if(DisA > DisB) + { DisA = DisB; } + + unsigned int HA = LB.len(0); + unsigned int VA = LB.len(1); + + + if(VA > HA) + { HA = VA; } + return (DisA) * 3 < HA * 2; + } + + + + inline bool allign_proximity_large_left( const point2d& Left, const point2d& Right) {return allign_proximity_large_left(img_influ(Left), img_influ(Right));} @@ -1538,7 +1652,10 @@ namespace mymln allignV < lines_bbox[lines_union[Left]].len(0) && lines_bbox[lines_union[Left]].pcenter()[0] < lines_bbox[lines_union[Right]].pcenter()[0]; } - + inline bool is_start_end_line(const point2d& point) + {return is_start_end_line(img_influ(point));} + inline bool is_start_end_line(const Label lbl) + {return start_end_lines_mask(lbl);} inline bool allign_bottom(const point2d& Left, const point2d& Right) {return allign_bottom(img_influ(Left), img_influ(Right));} inline bool allign_bottom(const Label Left, const Label Right) @@ -2033,6 +2150,8 @@ namespace mymln { mymln::debug::save_label_image(img, implicit_separators_union , file);} vertex_image<point2d,bool> fun_mask_separators() { return fun_mask_(separators_mask); } + vertex_image<point2d,bool> fun_mask_V_separators() + { return fun_mask_(Vseparator_mask); } vertex_image<point2d,bool> fun_mask_containers() { return fun_mask_(containers_mask); } vertex_image<point2d,bool> fun_mask_alone_letters() @@ -2047,6 +2166,8 @@ namespace mymln { return fun_mask_(all_mask); } + vertex_image<point2d,bool> fun_mask_image() + { return fun_mask_(image_mask); } vertex_image<point2d,bool> fun_mask_letters() { return fun_mask_(letters_mask); } vertex_image<point2d,bool> fun_mask_start_lines() @@ -2195,6 +2316,15 @@ namespace mymln _bboxgp[Par1].has(_bboxgp[Par2].pmax()) ; } + inline bool letter_included_center(point2d Par1, point2d Par2) + { return letter_included_center(img_influ(Par1), img_influ(Par2)); } + inline bool letter_included_center(Label Par1, Label Par2) + { + return + _bboxgp[Par1].has(_bboxgp[Par2].pcenter()); + } + + inline bool paragraph_included_influence(point2d Par1, point2d Par2) { return paragraph_included_influence(img_influ(Par1), img_influ(Par2)); } inline bool paragraph_included_influence(Label Par1, Label Par2) @@ -3258,7 +3388,7 @@ namespace mymln fun::i2v::array<bool> noise_mask; fun::i2v::array<bool> kill_mask; fun::i2v::array<bool> all_mask; - + fun::i2v::array<bool> image_mask; mln::util::array<std::string> tag_lbl; mln::util::array<bool> Btag_lbl; diff --git a/scribo/sandbox/raphael/code/my/document/separator.hh b/scribo/sandbox/raphael/code/my/document/separator.hh index 9c39f20..aa5ace9 100644 --- a/scribo/sandbox/raphael/code/my/document/separator.hh +++ b/scribo/sandbox/raphael/code/my/document/separator.hh @@ -10,7 +10,37 @@ namespace mymln { namespace separators { - //TODO: CHANGER contain_Hseparator en VSeparator Le H c etait pour le test + + + template<typename L, typename F, typename D> + void separators_find_wrong(mymln::document::document<L,F,D>& doc) + { + + typedef vertex_image<point2d,bool> v_ima_g; + typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; + v_ima_g mask = doc.fun_mask_V_separators(); + mln_piter_(v_ima_g) v(mask.domain()); + typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t; + nbh_t nbh(mask); + mln_niter_(nbh_t) q(nbh, v); + mymln::util::union_find<L> sep_union(doc.size()); + for_all(v) + { + if(doc.contain_letter(v)) + { + for_all(q) + { + if(doc.is_big_element_V(q)){continue;} + if(doc.allign_proximity_strict(q,v) && doc.allign_V(q,v) && doc.allign_size(q,v)) + {doc.debug_draw_line_red_buffer(q,v); doc.add_letter_coerce(q);} + else if(doc.allign_V(q,v) && doc.allign_size(q,v) && doc.allign_proximity_left(v,q)) + {doc.debug_draw_line_red_buffer(q,v); doc.add_letter_coerce(q);} + } + } + } + + } + template<typename L, typename F, typename D> void separators_rebuild(mymln::document::document<L,F,D>& doc) { @@ -27,8 +57,11 @@ namespace mymln if(!doc[v]){continue;} if(doc.contain_Vseparator(doc[v]) && !sep_union[doc[v]]) { + sep_union[doc[v]] = sep_union.new_set(); sep_union.add_self_link(doc[v]); + if(doc.is_very_big_element_V(v)) + { continue; } } for_all(q) { @@ -256,6 +289,11 @@ namespace mymln count[doc[q]]++; } } + else if(doc.allign_proximity_strict(q,v) && doc.allign_left(v,q) && doc.allign_V(q,v) && doc.same_line(q, v)) + { + count[doc[q]]++; + doc.debug_draw_line_orange_buffer(v, q); + } } } @@ -308,6 +346,11 @@ namespace mymln doc.debug_draw_line_green_buffer(v, q); } } + else if(doc.allign_proximity_strict(q,v) && doc.allign_right(v,q) && doc.allign_V(q,v) && doc.same_line(q, v)) + { + count[doc[q]]++; + doc.debug_draw_line_orange_buffer(v, q); + } } } diff --git a/scribo/sandbox/raphael/code/my/runtime/lib.hh b/scribo/sandbox/raphael/code/my/runtime/lib.hh index b3100f9..f60a995 100644 --- a/scribo/sandbox/raphael/code/my/runtime/lib.hh +++ b/scribo/sandbox/raphael/code/my/runtime/lib.hh @@ -17,6 +17,7 @@ namespace mymln run.add_function("separators.make_clean_left", &(mymln::document::separators::separators_find_allign)); run.add_function("separators.rebuild", &(mymln::document::separators::separators_rebuild)); run.add_function("separators.merge", &(mymln::document::separators::separators_merge)); + run.add_function("separators.find_wrong", &(mymln::document::separators::separators_find_wrong)); } @@ -60,6 +61,11 @@ namespace mymln run.add_function("clean.finalize_paragraph", &(mymln::document::clean_finalize_paragraph)); run.add_function("clean.center_paragraphs", &(mymln::document::clean_center_paragraphs)); + + + run.add_function("clean.paragraphs_couple", &(mymln::document::clean_paragraphs_couple)); + + run.add_function("clean.paragraphs_first_line", &(mymln::document::clean_paragraphs_first_line)); } template<typename L, typename F, typename D> diff --git a/scribo/sandbox/raphael/code/test.cc b/scribo/sandbox/raphael/code/test.cc index 6f33db5..3eab190 100644 --- a/scribo/sandbox/raphael/code/test.cc +++ b/scribo/sandbox/raphael/code/test.cc @@ -1,4 +1,4 @@ - +#define NREMOTE #include <vector> #include <mln/io/pbm/all.hh> #include <mln/io/ppm/all.hh> @@ -51,6 +51,10 @@ #include <my/data/page.hh> #include <my/preprocessing/preprocessing.hh> +#ifndef NREMOTE +#include <my/debug/remote/document_remote.hh> +#include <my/debug/remote/lib.hh> +#endif using namespace mln; using namespace std; @@ -252,11 +256,23 @@ void Process(std::string File, std::string Dir, mymln::runtime::runtime< value:: } - - +#ifndef NREMOTE +// THIS IS USED TO CREATE A FILTER WITHOUT RECOMPILING +mymln::document::debug::remote< value::int_u<16> ,float,short> rem; +template<typename L, typename F, typename D> + void clean_remote(mymln::document::document<L,F,D>& doc) + { + rem.filter(doc); + } +#endif + + int main( int argc, char** argv) { mymln::runtime::runtime< value::int_u<16> ,float,short> run; + #ifndef NREMOTE + rem = mymln::document::debug::remote< value::int_u<16> ,float,short>(); + #endif mymln::runtime::load_clean(run); mymln::runtime::load_debug(run); mymln::runtime::load_cooking(run); @@ -269,6 +285,7 @@ int main( int argc, char** argv) { bool dir = false; bool prog = false; + bool remote = false; std::string Dir = ""; std::string Prog = ""; for(int N = 1 ; N < argc; N++) @@ -287,12 +304,26 @@ int main( int argc, char** argv) prog = false; } + #ifndef NREMOTE + else if(remote) + { + Prog = argv[N]; + rem.load(Prog.c_str()); + remote = false; + run.add_function("@remote", clean_remote); + mymln::document::debug::load(rem); + } + #endif else { if(!strcmp(argv[N], "-D")) { dir = true;} else if(!strcmp(argv[N], "-P")) { prog = true; } + #ifndef NREMOTE + else if(!strcmp(argv[N], "--Remote")) + { remote = true; } + #endif else { Process(argv[N], Dir, run); } } -- 1.7.2.5
13 years, 3 months
1
0
0
0
last-svn-commit-887-ge10fcbe Updtate everything. Add Breakpoint, Rebuild Separators. Patch someproblems with union find. Patch some problem with paragraph detection. Still have some problem with paragraphs
by Raphael Boissel
--- scribo/sandbox/raphael/code/my/document/clean.hh | 233 ++++++- .../sandbox/raphael/code/my/document/document.hh | 807 ++++++++++++++++++-- scribo/sandbox/raphael/code/my/document/outline.hh | 87 +++ .../sandbox/raphael/code/my/document/separator.hh | 115 +++- scribo/sandbox/raphael/code/my/runtime/lib.hh | 50 ++ scribo/sandbox/raphael/code/my/util/union.hh | 15 +- scribo/sandbox/raphael/code/test.cc | 15 +- 7 files changed, 1251 insertions(+), 71 deletions(-) create mode 100644 scribo/sandbox/raphael/code/my/document/outline.hh diff --git a/scribo/sandbox/raphael/code/my/document/clean.hh b/scribo/sandbox/raphael/code/my/document/clean.hh index b996b8a..94d0422 100644 --- a/scribo/sandbox/raphael/code/my/document/clean.hh +++ b/scribo/sandbox/raphael/code/my/document/clean.hh @@ -15,7 +15,7 @@ namespace mymln typedef vertex_image<point2d,bool> v_ima_g; typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; - v_ima_g mask = doc.fun_mask_letters(); + v_ima_g mask = doc.fun_mask_all_letters(); mln_piter_(v_ima_g) v(mask.domain()); typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t; nbh_t nbh(mask); @@ -339,13 +339,22 @@ namespace mymln { for_all(q) { - if(doc.contain_line(q) && doc.get_line_length(q) == 1 && doc.line_influence_has(v,q)) + if( + doc.contain_line(q) && + !doc.same_line(q,v) && + doc.get_line_length(q) == 1 && + doc.line_influence_has(v,q) && + !doc.allign_H_large(v,q) && + (doc.allign_base_line_strict(v,q) || doc.allign_V(v,q)) + ) { + doc.debug_draw_line_green_buffer(q,v); doc.add_to_line_link(q,v); } } } } + doc.propage_line_link(); } @@ -394,6 +403,21 @@ namespace mymln doc.add_to_line_link(v, q); doc.debug_draw_line_red_buffer(v,q); } + else if( + + doc.line_influence_reciprocal(q, v) && + !doc.same_line(q,v) && + doc.allign_V(q,v) && + doc.allign_size_x_height(v,q) && + doc.get_line_length(v) > 4 && + doc.allign_proximity_line(v,q) + ) + { + doc.debug_draw_line_orange_buffer(v,q); + doc.debug_draw_box_red_buffer(v); + doc.debug_draw_box_green_buffer(q); + doc.add_to_line_link(v, q); + } } @@ -738,10 +762,12 @@ namespace mymln } template<typename L, typename F, typename D> - void clean_lines_space(mymln::document::document<L,F,D>& doc, std::string dgb_out,image2d<bool> s) + void clean_line_space(mymln::document::document<L,F,D>& doc) { - image2d<value::rgb8> out; - mln::initialize(out, s); + mln::util::array<L> KillMe = mln::util::array<L>(doc.size()); + unsigned int Killer = 0; + if(doc.size() > 0){KillMe[0] = 0;} + typedef vertex_image<point2d,bool> v_ima_g; typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; v_ima_g mask = doc.fun_mask_letters(); @@ -755,23 +781,37 @@ namespace mymln { if(doc.same_line(q, v)) { - draw::line(out, q,v, mln::literal::red); if(doc.in_beginning_of_line(q) || doc.in_end_of_line(q)) { - draw::line(out, q,v, mln::literal::green); - if(doc.space(q, v) > doc.get_letter_middle_space(q) * 10) + if(doc.space(q, v) > doc.get_letter_middle_space(q) * 4 && doc.allign_half_line_letter(v,q)) { - draw::line(out, q,v, mln::literal::blue); - /*if(doc[q] == doc.get_beginning_of_line(q)) - doc.add_to_line_link(v, q); */ - //doc.add_noise(q); + if(doc[q] == doc.get_beginning_of_line(q) && doc.allign_V_side(v,q)) + { + doc.add_to_line_self_link(v); + doc.add_to_line_link(v, q); + KillMe[Killer++] = doc[q]; + KillMe[Killer] = 0; + doc.debug_draw_line_green_buffer(q,v); + doc.debug_draw_box_red_buffer(q); + } + else + { + doc.debug_draw_line_red_buffer(q,v); + } } } } } } doc.propage_line_link(); - io::ppm::save(mln::debug::superpose(out, s, literal::white),dgb_out); + Killer = 0; + while(Killer < doc.size() && KillMe[Killer]) + { + doc.add_noise(KillMe[Killer]); + doc.kill(KillMe[Killer]); + Killer++; + } + } @@ -825,7 +865,8 @@ namespace mymln doc.get_line_length(q)> 5 && doc.allign_V(v, q) && doc.allign_proximity(v, q) && - doc.allign_size_height(v, q) + doc.allign_size_height(v, q) && + !doc.contain_separator(v) ) { doc.add_to_line_link(q,v); @@ -853,6 +894,8 @@ namespace mymln { for_all(q) { + if(doc.paragraph_start_with_tab(q) && doc.same_paragraph(q,v)) + {doc.debug_draw_line_red_buffer(v, q);} if( doc.contain_paragraph(q) && !doc.same_paragraph(q,v) && @@ -873,7 +916,169 @@ namespace mymln } doc.propage_paragraph_link(); } + template<typename L, typename F, typename D> + void find_previous_next_line(mymln::document::document<L,F,D>& doc) + { + doc.reserve_previous_next_line(); + typedef vertex_image<point2d,bool> v_ima_g; + typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; + v_ima_g mask = doc.fun_mask_all_letters(); + mln_piter_(v_ima_g) v(mask.domain()); + typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t; + nbh_t nbh(mask); + mln_niter_(nbh_t) q(nbh, v); + for_all(v) + { + if(doc.contain_line(v)) + { + for_all(q) + { + if( + doc.contain_line(q) && + !doc.same_line(q, v) && + doc.allign_H_large(q, v) && + doc.allign_size_height_line(q,v)) + { + if(doc.allign_top_large(q,v)) + { + doc.debug_draw_line_green_buffer(q,v); + doc.add_line_previous(q,v); + } + else if(doc.allign_bottom_large(q,v)) + { + doc.debug_draw_line_red_buffer(q,v); + doc.add_line_next(q,v); + } + } + } + } + } + } + + template<typename L, typename F, typename D> + void clean_letter_previous_next_line(mymln::document::document<L,F,D>& doc) + { + + typedef vertex_image<point2d,bool> v_ima_g; + typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; + v_ima_g mask = doc.fun_mask_start_end_lines(); + mln_piter_(v_ima_g) v(mask.domain()); + typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t; + nbh_t nbh(mask); + mln_niter_(nbh_t) q(nbh, v); + for_all(v) + { + if(doc.contain_line(v) && doc.return_next_line(doc.get_line_ID(v))) + { + for_all(q) + { + if( + + doc.contain_line(q) && + !doc.same_line(q, v) && + doc.return_next_line(doc.get_line_ID(v)) == doc.return_next_line(doc.get_line_ID(q)) && + doc.return_previous_line(doc.get_line_ID(v)) == doc.return_previous_line(doc.get_line_ID(q)) && + doc.allign_V_line(v, q) && + doc.allign_size_height_line(v, q) && + !doc.killed(doc[q]) + ) + { + doc.debug_draw_line_green_buffer(v,q); + + doc.add_to_line_link(v,q); + } + } + } + } + doc.propage_line_link(); + + } + + template<typename L, typename F, typename D> + void clean_V_lines(mymln::document::document<L,F,D>& doc) + { + + typedef vertex_image<point2d,bool> v_ima_g; + typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; + v_ima_g mask = doc.fun_mask_all_letters(); + mln_piter_(v_ima_g) v(mask.domain()); + typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t; + nbh_t nbh(mask); + mln_niter_(nbh_t) q(nbh, v); + for_all(v) + { + for_all(q) + { + if( + doc.allign_H(v,q) && + doc.allign_size_width_strict(v,q) + ) + { + doc.add_temp_letter(v); + doc.debug_draw_line_green_buffer(v,q); + } + } + } + doc.propage_line_link(); + + } + + + template<typename L, typename F, typename D> + void clean_paragraphs_end_line(mymln::document::document<L,F,D>& doc) + { + typedef vertex_image<point2d,bool> v_ima_g; + typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; + v_ima_g mask = doc.fun_mask_all_letters(); + mln_piter_(v_ima_g) v(mask.domain()); + typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t; + nbh_t nbh(mask); + mln_niter_(nbh_t) q(nbh, v); + for_all(v) + { + if(doc.contain_paragraph(v)) + { + for_all(q) + { + if( + doc.contain_paragraph(q) && + !doc.same_paragraph(q,v) && + doc.get_paragraph_length(q) == 1) + { + if( + doc.allign_top_paragraph(q,v) && + doc.allign_H_min_paragraph(q,v) && + doc.allign_size_height_paragraph_line(q,v) && + doc.allign_smaller_paragraph(v, q) && + doc.compatible_paragraph_middle_width(v,q) && + doc.allign_proximity_paragraph_up_large(q,v) && + doc.get_line_length(q) > 3 + ) + { + doc.debug_draw_line_green_buffer(q,v); + doc.add_to_paragraph_link(v, q); + } + else if( + doc.allign_top_paragraph(v,q) && + !doc.paragraph_start_with_tab(v) && + doc.allign_size_height_paragraph_line(q,v) && + doc.allign_H_max_paragraph(q,v) && + doc.allign_smaller_paragraph(v, q) && + doc.compatible_paragraph_middle_width(v,q) && + doc.allign_proximity_paragraph_up_large(q,v) && + doc.get_line_length(q) > 3 + ) + { + doc.debug_draw_line_green_buffer(q,v); + doc.add_to_paragraph_link(v, q); + } + } + } + } + } + doc.propage_paragraph_link(); + } } } diff --git a/scribo/sandbox/raphael/code/my/document/document.hh b/scribo/sandbox/raphael/code/my/document/document.hh index 880d4c5..b3735df 100644 --- a/scribo/sandbox/raphael/code/my/document/document.hh +++ b/scribo/sandbox/raphael/code/my/document/document.hh @@ -45,6 +45,7 @@ namespace mymln { img = ima; _bboxgp = bboxgp; + _bboxgp_influ = mln::util::array<box2d>(Areas + 1); _area_graph = area_graph; separators_mask = fun::i2v::array<bool>(Areas + 1); containers_mask = fun::i2v::array<bool>(Areas + 1); @@ -53,17 +54,18 @@ namespace mymln Hseparator_mask = fun::i2v::array<bool>(Areas + 1); Vseparator_mask = fun::i2v::array<bool>(Areas + 1); noise_mask = fun::i2v::array<bool>(Areas + 1); + temp_letter = fun::i2v::array<bool>(Areas + 1); alone_letters_mask = fun::i2v::array<bool>(Areas + 1); implicit_separators_left_mask = fun::i2v::array<bool>(Areas + 1); implicit_separators_right_mask = fun::i2v::array<bool>(Areas + 1); kill_mask = fun::i2v::array<bool>(Areas + 1); + all_mask = fun::i2v::array<bool>(Areas + 1); CImpSep = 1; NImpSep = 2; lines_union = mymln::util::union_find<Label>(Areas + 1); implicit_separators_union = mymln::util::union_find<Label>(Areas + 1); debug_buffer_enable = false; paragraphs_union = mymln::util::union_find<Label>(Areas + 1); - tag_lbl = mln::util::array<std::string>(Areas + 1); Btag_lbl = mln::util::array<bool>(Areas + 1); lines_split = mln::util::array<Label>(Areas + 1); @@ -79,8 +81,14 @@ namespace mymln CPar = 1; NPar = 2; Areas_Number_ = Areas + 1; - + sep_right_cooked = false; + lines_cooked = false; + Enable_Debug_Buffer = false; // Remanant version of debug_buffer_enable } + inline bool killed(const Label lbl) + {return kill_mask(lbl);} + inline void kill(const Label lbl) + {kill_mask(lbl) = true;all_mask(lbl) = false;} inline unsigned int count() {return Areas_Number_;} /* OPERATION ON PAGE */ @@ -123,6 +131,11 @@ namespace mymln } } } + + + + + inline bool contain_paragraph(const point2d& point) {return contain_paragraph(img_influ(point));} inline bool contain_paragraph(const Label lbl) @@ -349,7 +362,13 @@ namespace mymln inline void jump_to_line(const point2d& point) { jump_to_line(img_influ(point)); } + + inline bool contain_start_line(const point2d& point) + { return contain_start_line(img_influ(point)); } + inline bool contain_end_line(const point2d& point) + { return contain_end_line(img_influ(point)); } + inline bool contain_line(const point2d& point) { return contain_line(img_influ(point)); } @@ -379,9 +398,61 @@ namespace mymln add_new_line(lbl); } + inline bool contain_line_self_link(const Label lbl) + { return lines_union[lbl].is_self_link();} + inline bool move_line_self_link(const Label lbl) + { + if(lines_union[lbl] && lines_union[lbl].is_self_link()) + { + if(lines_first_label[lines_union[lbl]] == lbl) + { + if(lines_union[lines_last_label[lines_union[lbl]]] == 0) // CHECK IF THE LAST LABEL HAS NOT BEEN REMOVED + recook_lines(); + + lines_union.add_link(lines_last_label[lines_union[lbl]], lbl); + lines_union.add_self_link(lines_last_label[lines_union[lbl]]); + } + else if(lines_last_label[lines_union[lbl]] == lbl) + { + if(lines_union[lines_first_label[lines_union[lbl]]] == 0) // CHECK IF THE FIRST LABEL HAS NOT BEEN REMOVED + recook_lines(); + + lines_union.add_link(lines_first_label[lines_union[lbl]], lbl); + lines_union.add_self_link(lines_first_label[lines_union[lbl]]); + } + else + { + if(lines_union[lines_first_label[lines_union[lbl]]]) + { + lines_union.add_link(lines_first_label[lines_union[lbl]], lbl); + lines_union.add_self_link(lines_first_label[lines_union[lbl]]); + } + else if(lines_first_label[lines_union[lbl]]) + { + lines_union.add_link(lines_last_label[lines_union[lbl]], lbl); + lines_union.add_self_link(lines_last_label[lines_union[lbl]]); + } + else + { + recook_lines(); + lines_union.add_link(lines_first_label[lines_union[lbl]], lbl); + lines_union.add_self_link(lines_first_label[lines_union[lbl]]); + } + } + return true; + } + return false; + } + inline bool contain_line(const Label lbl) { return lines_union[lbl] != 0;} + inline bool contain_start_line(const Label lbl) + { return start_lines_mask(lbl);} + + inline bool contain_end_line(const Label lbl) + { return start_lines_mask(lbl);} + inline void add_noise(const point2d& point) {add_noise(img_influ(point));} @@ -397,20 +468,31 @@ namespace mymln Hseparator_mask(lbl) = false; Vseparator_mask(lbl) = false; alone_letters_mask(lbl) = false; - + all_letters_mask(lbl) = false; + if(lines_cooked) + { + start_end_lines_mask(lbl) = false; + end_lines_mask(lbl) = false; + start_lines_mask(lbl) = false; + } noise_mask(lbl) = true; lines_union[lbl] = 0; } void inline add(Label lbl, int link) { + all_mask(lbl) = true; if (link == 0){add_noise(lbl);} else if (link > 30){ add_separator(lbl);} - else { add_letter(lbl);} + else + { + add_letter(lbl); + } /* SET UP SPECIAL MASK TO FALSE */ implicit_separators_left_mask(lbl) = false; implicit_separators_right_mask(lbl) = false; kill_mask(lbl) = false; + temp_letter(lbl) = false; } void inline invalid_letter(const point2d& point) {invalid_letter(img_influ(point));} @@ -444,6 +526,7 @@ namespace mymln alone_letters_mask(lbl) = true; noise_mask(lbl) = false; all_letters_mask(lbl) = true; + temp_letter = false; } void add_letter_coerce(const Label lbl) { @@ -456,12 +539,18 @@ namespace mymln Hseparator_mask(lbl) = false; alone_letters_mask(lbl) = false; noise_mask(lbl) = false; + temp_letter = false; } void add_letter(const Label lbl) { CLet++; if(label_valid_size_Min_(lbl, 3) || label_valid_size_Min_Large_(lbl, 2)) { + if(letter_ratio_XY(lbl) > 20) + {add_separator(lbl); return;} + if(letter_ratio_YX(lbl) > 10) + {add_separator(lbl); return;} + img_influ(_bboxgp[lbl].pcenter()) = lbl; letters_mask(lbl) = true; all_letters_mask(lbl) = true; @@ -470,7 +559,7 @@ namespace mymln Vseparator_mask(lbl) = false; Hseparator_mask(lbl) = false; alone_letters_mask(lbl) = false; - + temp_letter = false; noise_mask(lbl) = false; } else @@ -491,12 +580,14 @@ namespace mymln noise_mask(lbl) = false; alone_letters_mask(lbl) = false; all_letters_mask(lbl) = false; + } else add_noise(lbl); } void add_Hseparator(const Label lbl) { + _bboxgp_influ[lbl] = _bboxgp[lbl].to_larger(4); CSep++; containers_mask(lbl) = false; Vseparator_mask(lbl) = false; @@ -509,6 +600,7 @@ namespace mymln } void add_Vseparator(const Label lbl) { + _bboxgp_influ[lbl] = _bboxgp[lbl].to_larger(4); CSep++; containers_mask(lbl) = false; Vseparator_mask(lbl) = true; @@ -519,10 +611,19 @@ namespace mymln noise_mask(lbl) = false; all_letters_mask(lbl) = false; } + bool inline separator_has(const point2d& A, const point2d& B) + { + return _bboxgp_influ[img_influ(A)].has(B) || separator_has(img_influ(A), img_influ(B)); + } + bool inline separator_has(const Label A,const Label B) + { + return _bboxgp_influ[A].has(_bboxgp[B].pmin()) || _bboxgp_influ[A].has(_bboxgp[B].pmax()); + } void inline add_separator(const point2d& point) {add_letter(img_influ(point)); } void add_separator(const Label lbl) { + if(label_valid_ratio_(lbl, _VSepRatio_Min,_VSepRatio_Max)) add_Vseparator(lbl); else if(label_valid_ratio_(lbl, _HSepRatio_Min,_HSepRatio_Max)) @@ -540,6 +641,11 @@ namespace mymln bool inline contain_separator(const Label lbl) {return contain_(lbl, separators_mask);} + bool inline contain_Vseparator(const Label lbl) + {return contain_(lbl, Vseparator_mask);} + bool inline contain_Hseparator(const Label lbl) + {return contain_(lbl, Hseparator_mask);} + bool inline contain_letter(const Label lbl) {return contain_(lbl, letters_mask);} @@ -588,6 +694,7 @@ namespace mymln short int allignV = lines_bbox[lines_union[Left]].pcenter()[0] - lines_bbox[lines_union[Right]].pcenter()[0]; return (!allignV < 0) && allignV * 2 > lines_bbox[lines_union[Left]].len(0); } + inline bool allign_top( const Label Left, const Label Right) { @@ -595,6 +702,23 @@ namespace mymln return allignV < label_size_(0, Left) && (_bboxgp[Left].pcenter()[0]) > (_bboxgp[Right].pcenter()[0]); } + inline bool allign_top_large( const point2d& Left, const point2d& Right) + {return allign_top_large(img_influ(Left), img_influ(Right));} + + inline bool allign_top_large( const Label Left, const Label Right) + { + short int allignV = label_allign_(0, Left, Right); + return allignV < lines_bbox[lines_union[Left]].len(0) * 2 && (_bboxgp[Left].pcenter()[0]) > (_bboxgp[Right].pcenter()[0]); + } + + inline bool allign_bottom_large( const point2d& Left, const point2d& Right) + {return allign_bottom_large(img_influ(Left), img_influ(Right));} + + inline bool allign_bottom_large( const Label Left, const Label Right) + { + short int allignV = label_allign_(0, Left, Right); + return allignV < lines_bbox[lines_union[Left]].len(0) * 2 && (_bboxgp[Left].pcenter()[0]) < (_bboxgp[Right].pcenter()[0]); + } inline bool allign_up_line( const point2d& Left, const point2d& Right) {return allign_up_line(img_influ(Left), img_influ(Right));} @@ -628,7 +752,7 @@ namespace mymln inline bool allign_left( const Label Left, const Label Right) { - return _bboxgp[Left].pmin()[0] > _bboxgp[Right].pmin()[0]; + return _bboxgp[Left].pmin()[1] > _bboxgp[Right].pmin()[1]; } inline bool allign_right( const point2d& Left, const point2d& Right) @@ -637,11 +761,20 @@ namespace mymln inline bool allign_right( const Label Left, const Label Right) { - return _bboxgp[Left].pmin()[0] < _bboxgp[Right].pmin()[0]; + return _bboxgp[Left].pmin()[1] < _bboxgp[Right].pmin()[1]; } + inline bool allign_H_large_one( const point2d& Left, const point2d& Right) + {return allign_H_large_one(img_influ(Left), img_influ(Right));} + + inline bool allign_H_large_one( const Label Left, const Label Right) + { + short int allignV = label_allign_(1, Left, Right) * 1.5f; + return allignV <= label_size_(1, Left) + 2; + } + inline bool allign_H_large( const point2d& Left, const point2d& Right) {return allign_H_large(img_influ(Left), img_influ(Right));} @@ -650,7 +783,18 @@ namespace mymln short int allignV = label_allign_(1, Left, Right) * 1.5f; return allignV < label_size_(1, Left); } + + + inline bool allign_H_strict( const point2d& Left, const point2d& Right) + {return allign_H(img_influ(Left), img_influ(Right));} + inline bool allign_H_strict( const Label Left, const Label Right) + { + short int allignH = label_allign_(1, Left, Right) * 5; + return allignH < label_size_(1, Left) && allignH < label_size_(1, Right); + } + + inline bool allign_H( const point2d& Left, const point2d& Right) {return allign_H(img_influ(Left), img_influ(Right));} @@ -660,6 +804,29 @@ namespace mymln return allignH < label_size_(1, Left) && allignH < label_size_(1, Right); } + + inline bool allign_H_min_paragraph( const point2d& Left, const point2d& Right) + {return allign_H_min_paragraph(img_influ(Left), img_influ(Right));} + + inline bool allign_H_min_paragraph( const Label Left, const Label Right) + { + short int allignH = paragraphs_bbox[paragraphs_union[Left]].pmin()[1] - paragraphs_bbox[paragraphs_union[Right]].pmin()[1]; + allignH *= 2; + return allignH < paragraphs_bbox[paragraphs_union[Left]].len(0); + } + + + inline bool allign_H_max_paragraph( const point2d& Left, const point2d& Right) + {return allign_H_max_paragraph(img_influ(Left), img_influ(Right));} + + inline bool allign_H_max_paragraph( const Label Left, const Label Right) + { + short int allignH = paragraphs_bbox[paragraphs_union[Left]].pmin()[1] - paragraphs_bbox[paragraphs_union[Right]].pmin()[1]; + allignH *= 2; + return allignH < paragraphs_bbox[paragraphs_union[Left]].len(0); + } + + inline bool allign_H_min( const point2d& Left, const point2d& Right) {return allign_H_min(img_influ(Left), img_influ(Right));} @@ -681,6 +848,56 @@ namespace mymln inline bool allign_size_height( const point2d& Left, const point2d& Right) {return allign_size_height(img_influ(Left), img_influ(Right));} + + + inline bool allign_proximity_top_strict( const point2d& Left, const point2d& Right) + {return allign_proximity_top(img_influ(Left), img_influ(Right));} + + inline bool allign_proximity_top_strict( const Label Left, const Label Right) + { + box2d LB = _bboxgp[Left]; + box2d RB = _bboxgp[Right]; + + int DisA = LB.pmax()[0] - RB.pmin()[0]; + int DisB = RB.pmax()[0] - LB.pmin()[0]; + if(DisA < 0){DisA = -DisA;} + if(DisB < 0){DisB = -DisB;} + if(DisA > DisB) + { DisA = DisB; } + + unsigned int HA = LB.len(0); + unsigned int HB = LB.len(1); + + if(HB > HA) + { HA = HB; } + return (DisA * 2) < HA; + } + + + inline bool allign_proximity_top( const point2d& Left, const point2d& Right) + {return allign_proximity_top(img_influ(Left), img_influ(Right));} + + inline bool allign_proximity_top( const Label Left, const Label Right) + { + box2d LB = _bboxgp[Left]; + box2d RB = _bboxgp[Right]; + + int DisA = LB.pmax()[0] - RB.pmin()[0]; + int DisB = RB.pmax()[0] - LB.pmin()[0]; + if(DisA < 0){DisA = -DisA;} + if(DisB < 0){DisB = -DisB;} + if(DisA > DisB) + { DisA = DisB; } + + unsigned int HA = LB.len(0); + unsigned int HB = LB.len(1); + + if(HB > HA) + { HA = HB; } + return (DisA * 2) < HA * 3; + } + + inline bool allign_proximity_V( const point2d& Left, const point2d& Right) {return allign_proximity_V(img_influ(Left), img_influ(Right));} @@ -752,7 +969,33 @@ namespace mymln return (DisA * 2) < HA && (DisA * 2) < HB; } + + + inline bool allign_proximity_paragraph_up_large( const point2d& Left, const point2d& Right) + {return allign_proximity_paragraph_up_large(img_influ(Left), img_influ(Right));} + inline bool allign_proximity_paragraph_up_large( const Label Left, const Label Right) + { + box2d LB = paragraphs_bbox[paragraphs_union[Left]]; + box2d RB = paragraphs_bbox[paragraphs_union[Right]]; + + int DisA = LB.pmax()[0] - RB.pmin()[0]; + int DisB = RB.pmax()[0] - LB.pmin()[0]; + if(DisA < 0){DisA = -DisA;} + if(DisB < 0){DisB = -DisB;} + if(DisA > DisB) + { DisA = DisB; } + + unsigned int HA = lines_bbox[paragraphs_first_line[paragraphs_union[Left]]].len(0); + unsigned int HB = lines_bbox[paragraphs_first_line[paragraphs_union[Right]]].len(0); + + if(HA < HB) + { HA = HB; } + return (DisA) < HA; + } + + + inline bool allign_proximity_paragraph_up( const point2d& Left, const point2d& Right) {return allign_proximity_paragraph_up(img_influ(Left), img_influ(Right));} @@ -779,6 +1022,21 @@ namespace mymln inline bool allign_proximity_line_large( const point2d& Left, const point2d& Right) {return allign_proximity_line_large(img_influ(Left), img_influ(Right));} + + inline bool allign_size_height_paragraph_line( const point2d& Left, const point2d& Right) + { + return allign_size_height_paragraph_line(img_influ(Left), img_influ(Right)); + } + + inline bool allign_size_height_paragraph_line( const Label Left, const Label Right) + { + short int SizeL = lines_bbox[paragraphs_first_line[paragraphs_union[Left]]].len(0); + short int SizeR = lines_bbox[paragraphs_first_line[paragraphs_union[Right]]].len(0); + return SizeR > (SizeL / 2.2f) && SizeR < (SizeL * 2.2); + } + + + inline bool allign_size_height_line( const point2d& Left, const point2d& Right) { return allign_size_height_line(img_influ(Left), img_influ(Right)); @@ -817,6 +1075,32 @@ namespace mymln short int SizeR = _bboxgp[lines_union[Right]].len(1); return SizeR >= (SizeL / 5) && SizeR <= (SizeL * 5); } + + inline bool allign_size_width( const point2d& Left, const point2d& Right) + { + return allign_size_width(img_influ(Left), img_influ(Right)); + } + + inline bool allign_size_width( const Label Left, const Label Right) + { + short int SizeL = _bboxgp[Left].len(1); + short int SizeR = _bboxgp[Right].len(1); + return SizeR >= (SizeL / 2) && SizeR <= (SizeL * 2); + } + + + + inline bool allign_size_width_strict( const point2d& Left, const point2d& Right) + { + return allign_size_width_strict(img_influ(Left), img_influ(Right)); + } + + inline bool allign_size_width_strict( const Label Left, const Label Right) + { + short int SizeL = _bboxgp[Left].len(1); + short int SizeR = _bboxgp[Right].len(1); + return SizeR >= (SizeL / 1.5f) && SizeR <= (SizeL * 1.5f); + } @@ -1094,6 +1378,22 @@ namespace mymln } + inline bool allign_half_line_letter( const point2d& Left, const point2d& Right) + {return allign_half_line_letter(img_influ(Left), img_influ(Right));} + inline bool allign_half_line_letter( Label Left, Label Right) + { + return lines_bbox[lines_union[Left]].len(0) > (_bboxgp[Right].len(0) * 8); + } + + + inline bool allign_smaller_paragraph( const point2d& Left, const point2d& Right) + {return allign_smaller_paragraph(img_influ(Left), img_influ(Right));} + inline bool allign_smaller_paragraph( Label Left, Label Right) + { + return paragraphs_bbox[paragraphs_union[Left]].len(1) > (paragraphs_bbox[paragraphs_union[Right]].len(1)); + } + + inline bool allign_smaller_line( const point2d& Left, const point2d& Right) {return allign_smaller_line(img_influ(Left), img_influ(Right));} inline bool allign_smaller_line( Label Left, Label Right) @@ -1117,6 +1417,15 @@ namespace mymln return allignV < label_size_(0, Left) && allignV < label_size_(0, Right); } + inline bool allign_V_side( const point2d& Left, const point2d& Right) + {return allign_V_side(img_influ(Left), img_influ(Right));} + + inline bool allign_V_side( const Label Left, const Label Right) + { + short int allignV = label_allign_(0, Left, Right); + return allignV * 4 < label_size_(0, Left); + } + inline bool allign_V_extra_large( const point2d& Left, const point2d& Right) {return allign_V_extra_large(img_influ(Left), img_influ(Right));} @@ -1164,7 +1473,13 @@ namespace mymln return lines_bbox[lines_union[Left]].pmin()[0] < lines_bbox[lines_union[Right]].pmin()[0]; } - + inline bool allign_base_line_strict(const point2d& Left, const point2d& Right) + {return allign_base_line_strict(img_influ(Left), img_influ(Right));} + inline bool allign_base_line_strict(const Label Left, const Label Right) + { + short int allignV = label_allign_(0, Left, Right) * 1.7f; + return allignV < label_size_(0, Left) && _bboxgp[Left].pcenter()[0] < _bboxgp[Right].pcenter()[0]; + } inline bool allign_base_line(const point2d& Left, const point2d& Right) {return allign_base_line(img_influ(Left), img_influ(Right));} @@ -1187,8 +1502,8 @@ namespace mymln { Label FirstLine = paragraphs_first_line[paragraphs_union[Paragraph]]; return - _bboxgp[FirstLine].pmin()[1] > paragraphs_bbox[paragraphs_union[Paragraph]].pmin()[1] + - (paragraphs_bbox[paragraphs_union[Paragraph]].len(1) / 20); + lines_bbox[FirstLine].pmin()[1] > paragraphs_bbox[paragraphs_union[Paragraph]].pmin()[1] + + (paragraphs_bbox[paragraphs_union[Paragraph]].len(1) / 30); } void stat() @@ -1201,20 +1516,201 @@ namespace mymln std::cout << " lines(s) : " << CLine << std::endl; } + void debug_breakpoint() + { + if(debug_buffer_enable) + { + debug_save_buffer("break.ppm"); + std::system("eog break.ppm"); + debug_buffer_enable = true; + Enable_Debug_Buffer = true; + } + else + { + debug_save_all("break.ppm"); + std::system("eog break.ppm"); + } + } void debug_set_image(image2d<bool>& source) {debug_source = source;} + + /// ADD TEMP LETTER + /// description : add a label to the letter mask. The label will remain a letter while + /// reset_temp_letter is not called + /// WARNING: The old type of the label is still activated + inline void add_temp_letter(const point2d& Lbl) + { + add_temp_letter(img_influ(Lbl)); + } + inline void add_temp_letter(const Label lbl) + { + if(!all_letters_mask(lbl)) + { + letters_mask(lbl) = true; + all_letters_mask(lbl) = true; + temp_letter(lbl) = true; + } + } + inline void reset_temp_letter() + { + for(int N = 0; N < Areas_Number_; N++) + { + if(temp_letter(N)) + { + letters_mask(N) = false; + all_letters_mask(N) = false; + start_end_lines_mask(N) = false; + end_lines_mask(N) = false; + start_lines_mask(N) = false; + } + } + } + inline void debug_disable_buffer() + { + debug_buffer_enable = false; + } + inline void debug_enable_buffer() + { + if(Enable_Debug_Buffer) + { + debug_buffer_enable = true; + } + else + { + debug_create_buffer(); + } + } inline void debug_create_buffer() { mln::initialize(debug_buffer,img_influ); debug_buffer_enable = true; + Enable_Debug_Buffer = true; + } + inline void debug_save_dot_graph(std::string file) + { + fstream filestream(file.c_str(), fstream::in | fstream::out); + filestream << "graph 1 { " << std::endl; + typedef vertex_image<point2d,bool> v_ima_g; + typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; + v_ima_g mask = fun_mask_all_letters(); + mln_piter_(v_ima_g) v(mask.domain()); + typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t; + nbh_t nbh(mask); + mln_niter_(nbh_t) q(nbh, v); + for(int N = 0; N < Areas_Number_; N++) + { + filestream + << "_" + << N + << " [pos=\""<<_bboxgp[N].pcenter()[1] + << ".0," << img_influ.domain().pmax()[0] - _bboxgp[N].pcenter()[0] + << ".0\" " + << "shape=\"box\" " + << "width=\"" << ((Float)_bboxgp[N].len(1)) / 70.0f << ".0\" " + << "height=\"" << ((Float)_bboxgp[N].len(0)) / 70.0f << ".0\" " + << "label=\""<< get_tag(N) <<"\" " + << "];" + + << std::endl; + } + for_all(v) + { + for_all(q) + { + if(contain_letter(q) && contain_letter(v)) + { + if(contain_alone_letter(q) || contain_alone_letter(v)) + { + + filestream<< "_" << img_influ(q) << " -- _" << img_influ(v) << " [style=\"dotted\"]"; + } + else + { + if(same_line(q,v)) + {filestream<< "_" << img_influ(q) << " -- _" << img_influ(v) << " [color=\"green\"]";} + else + {filestream<< "_" << img_influ(q) << " -- _" << img_influ(v) << ";" << std::endl;} + } + } + else + { + filestream<< "_" << img_influ(q) << " -- _" << img_influ(v) << " [style=\"dotted\" color=\"red\"]"; + } + + } + } + filestream<< "}" << std::endl; + filestream.close(); } inline void debug_save_buffer(std::string file) { debug_buffer_enable = false; + Enable_Debug_Buffer = false; io::ppm::save(mln::debug::superpose(debug_buffer, debug_source, literal::white) , file); } - + inline void debug_save_buffer_paragraphs(std::string file) + { + Enable_Debug_Buffer = false; + debug_buffer_enable = false; + for(unsigned int N = 0; N < paragraphs_bbox.size(); N++) + { + if(paragraphs_bbox[N].is_valid()) + { + draw::box(debug_buffer, paragraphs_bbox[N], mln::literal::red); + if(paragraphs_bbox_influ[N].is_valid()) + { + draw::box(debug_buffer, paragraphs_bbox_influ[N], mln::literal::orange); + } + } + + } + io::ppm::save(mln::debug::superpose(debug_buffer, debug_source, literal::white) , file); + } + inline void debug_save_buffer_lines(std::string file) + { + Enable_Debug_Buffer = false; + debug_buffer_enable = false; + for(unsigned int N = 0; N < paragraphs_bbox.size(); N++) + { + if(lines_bbox[N].is_valid()) + { + draw::box(debug_buffer, lines_bbox[N], mln::literal::blue); + } + + } + io::ppm::save(mln::debug::superpose(debug_buffer, debug_source, literal::white) , file); + } + inline void debug_draw_box_red_buffer(const point2d& L) + {debug_draw_box_red_buffer(img_influ(L));} + inline void debug_draw_box_green_buffer(const point2d& L) + {debug_draw_box_green_buffer(img_influ(L));} + inline void debug_draw_box_red_buffer(const Label L) + { + if(debug_buffer_enable) + draw::box(debug_buffer, _bboxgp[L], mln::literal::red); + } + inline void debug_draw_box_green_buffer(const Label L) + { + if(debug_buffer_enable) + draw::box(debug_buffer,_bboxgp[L], mln::literal::green); + } + inline void debug_draw_box_green_influence_buffer(const Label L) + { + if(debug_buffer_enable) + { + draw::box(debug_buffer,_bboxgp[L], mln::literal::green); + draw::box(debug_buffer,_bboxgp_influ[L], mln::literal::green); + } + } + inline void debug_draw_box_red_influence_buffer(const Label L) + { + if(debug_buffer_enable) + { + draw::box(debug_buffer,_bboxgp[L], mln::literal::red); + draw::box(debug_buffer,_bboxgp_influ[L], mln::literal::red); + } + } inline void debug_draw_line_red_buffer(const point2d& A,const point2d& B ) { if(debug_buffer_enable) @@ -1225,35 +1721,31 @@ namespace mymln if(debug_buffer_enable) draw::line(debug_buffer, A, B, mln::literal::green); } - - void debug_save_union(std::string file) - {debug_save_union(file, debug_source);} - void debug_save_union(std::string file, image2d<bool> source) + inline void debug_draw_line_orange_buffer(const point2d& A,const point2d& B ) { - image2d<value::rgb8> ima_color; - mln::initialize(ima_color,img_influ); - - for(unsigned int N = 1; N < lines_union.size(); N++) - { - if(lines_union[N]) - { - if(N == lines_union.link(N)) - draw::box(ima_color, _bboxgp[N], mln::literal::blue); - else - draw::line(ima_color, _bboxgp[N].pcenter(), _bboxgp[lines_union.link(N)].pcenter(), mln::literal::blue); - } - } - for(unsigned int N = 1; N < paragraphs_union.size(); N++) + if(debug_buffer_enable) + draw::line(debug_buffer, A, B, mln::literal::orange); + } + template<typename UnionData> + void debug_union(mymln::util::union_find<UnionData> dat) + { + if(debug_buffer_enable) { - if(paragraphs_union[N]) + for(unsigned int N = 1; N < dat.size(); N++) { - if(N == paragraphs_union.link(N)) - draw::box(ima_color, _bboxgp[N], mln::literal::red); - else - draw::line(ima_color, _bboxgp[N].pcenter(), _bboxgp[paragraphs_union.link(N)].pcenter(), mln::literal::red); + if(dat[N]) + { + if(N == dat.link(N)) + draw::box(debug_buffer, _bboxgp[N], mln::literal::blue); + else + draw::line(debug_buffer, _bboxgp[N].pcenter(), _bboxgp[dat.link(N)].pcenter(), mln::literal::blue); + } + else if(dat.link(N) != 0) + { + draw::line(debug_buffer, _bboxgp[N].pcenter(), _bboxgp[dat.link(N)].pcenter(), mln::literal::red); + } } } - io::ppm::save(mln::debug::superpose(ima_color, source, literal::white) , file); } void debug_save_lines(std::string file) {debug_save_lines(file, debug_source);} @@ -1280,7 +1772,48 @@ namespace mymln } - + void debug_save_all_separators(std::string file) + {debug_save_all_separators(file, debug_source);} + void debug_save_all_separators(std::string file, image2d<bool> source) + { + image2d<value::rgb8> ima_color; + mln::initialize(ima_color,img_influ); + + for(unsigned int N = 0; N < _bboxgp.size(); N++) + { + if(_bboxgp[N].is_valid() && (contain_letter(N) || contain_alone_letter(N))) + { + if(sep_right_cooked) + { + if(implicit_separators_right_mask(N)) + draw::box(ima_color, _bboxgp[N], mln::literal::red); + else if(implicit_separators_left_mask(N)) + draw::box(ima_color, _bboxgp[N], mln::literal::cyan); + else if(temp_letter(N)) + draw::box(ima_color, _bboxgp[N], mln::literal::olive); + else + draw::box(ima_color, _bboxgp[N], mln::literal::green); + } + else + { + if(implicit_separators_left_mask(N)) + draw::box(ima_color, _bboxgp[N], mln::literal::cyan); + else if(implicit_separators_right_mask(N)) + draw::box(ima_color, _bboxgp[N], mln::literal::red); + else if(temp_letter(N)) + draw::box(ima_color, _bboxgp[N], mln::literal::olive); + else + draw::box(ima_color, _bboxgp[N], mln::literal::green); + } + } + else if(_bboxgp[N].is_valid() && contain_separator(N)) + { + draw::box(ima_color, _bboxgp[N], mln::literal::yellow); + } + } + + io::ppm::save(mln::debug::superpose(ima_color, source, literal::white) , file); + } void debug_save_all(std::string file) @@ -1294,7 +1827,15 @@ namespace mymln { if(_bboxgp[N].is_valid() && contain_letter(N)) { - draw::box(ima_color, _bboxgp[N], mln::literal::cyan); + if(temp_letter(N)) + draw::box(ima_color, _bboxgp[N], mln::literal::teal); + else + draw::box(ima_color, _bboxgp[N], mln::literal::cyan); + } + else if(_bboxgp[N].is_valid() && contain_separator(N)) + { + draw::box(ima_color, _bboxgp[N], mln::literal::green); + draw::box(ima_color, _bboxgp_influ[N], mln::literal::green); } } @@ -1369,9 +1910,7 @@ namespace mymln {return fun_mask_(all_letters_mask);} vertex_image<point2d,bool> fun_mask_all() { - typedef vertex_image<point2d,bool> v_ima_g; - v_ima_g result(_area_graph); - return result; + return fun_mask_(all_mask); } vertex_image<point2d,bool> fun_mask_letters() { return fun_mask_(letters_mask); } @@ -1456,7 +1995,12 @@ namespace mymln { return lines_bbox[lines_union[L]].len(1); } - + inline Float letter_ratio_YX(const point2d& point) + {return letter_ratio_YX(img_influ(point));} + inline Float letter_ratio_YX(Label Letter) + { + return (Float)_bboxgp[Letter].len(0) / (Float)_bboxgp[Letter].len(1); + } inline Float letter_ratio_XY(const point2d& point) {return letter_ratio_XY(img_influ(point));} inline Float letter_ratio_XY(Label Letter) @@ -1529,7 +2073,22 @@ namespace mymln lines_influ_bbox[lines_union[L2]].has(lines_influ_bbox[lines_union[L1]].pmin()) || lines_influ_bbox[lines_union[L2]].has(lines_influ_bbox[lines_union[L1]].pmax()) ; } - + inline bool allign_size_x_height( const point2d& Left, const point2d& Right) + {return allign_size_x_height(img_influ(Left), img_influ(Right));} + + inline bool allign_size_x_height( const Label Left, const Label Right) + { + short int SizeL0 = label_size_(0, Left); + short int SizeR0 = label_size_(0, Right); + short int SizeL1 = label_size_(1, Left); + short int SizeR1 = label_size_(1, Right); + short int Swap = 0; + if(SizeL0 < SizeL1) + { SizeL0 = SizeL1; } + if(SizeR0 < SizeR1){SizeR0 = SizeR1;} + return SizeR0 > (SizeL0 / 3) && SizeR0 < (SizeL0); + } + inline bool allign_size_large_inside( const point2d& Left, const point2d& Right) {return allign_size_large_inside(img_influ(Left), img_influ(Right));} @@ -1632,6 +2191,7 @@ namespace mymln separators_middle.fill(0); cook_separators_right_(); } + inline void propage_line_link() { lines_union.propage_links(); } /*image_if<image2d<Label> masked_image_letters() @@ -1677,6 +2237,34 @@ namespace mymln inline bool contain_implicit_separator(const Label lbl) {return implicit_separators_union[lbl] != 0; } + + inline void merge_separators(const point2d& A, const point2d& B) + { + merge_separators(img_influ(A), img_influ(B)); + } + inline void merge_separators(const Label A, const Label B) + { + + if( A && B && !kill_mask(A) && !kill_mask(B) && A != B) + { + img_influ(_bboxgp[B].pcenter()) = A; + _bboxgp[A].merge(_bboxgp[B]); + + _bboxgp[B] = box2d(); + + _bboxgp_influ[A].merge(_bboxgp_influ[B]); + _bboxgp_influ[B] = box2d(); + separators_mask(B) = false; + separators_mask(A) = true; + Vseparator_mask(B) = false; + Hseparator_mask(B) = false; + kill_mask(B) = true; + all_mask(B) = false; + } + + + } + inline void merge(const point2d& A, const point2d& B) { merge(img_influ(A), img_influ(B)); @@ -1689,6 +2277,7 @@ namespace mymln _bboxgp[A].merge(_bboxgp[B]); _bboxgp[B] = box2d(); kill_mask(B) = true; + all_mask(B) = false; if(letters_mask(A) && letters_mask(B)) { if(lines_union.is_self_link(B)) @@ -1760,7 +2349,7 @@ namespace mymln implicit_separators_right_mask(lbl) = false; } - inline Label& operator[](point2d i) + inline const Label& operator[](point2d i) { return img_influ(i);} inline point2d operator[](Label i) @@ -1807,14 +2396,19 @@ namespace mymln inline void recook_paragraphs() { paragraphs_len.fill(0); + paragraphs_letter_len.fill(0); cook_paragraphs_(); } inline void cook_paragraphs() { paragraphs_bbox = mln::util::array<box2d>(NPar + 1); paragraphs_len = mln::util::array<unsigned int>(NPar + 1); + paragraphs_letter_len = mln::util::array<unsigned int>(NPar + 1); + paragraphs_first_line = mln::util::array<unsigned int>(NPar + 1); paragraphs_bbox_influ = mln::util::array<box2d>(NPar + 1); + paragraphs_len.fill(0); + paragraphs_letter_len.fill(0); cook_paragraphs_(); } @@ -1836,6 +2430,18 @@ namespace mymln lines_width.fill(0); compute_letter_middle_width_(); } + inline void compute_paragraph_middle_height() + { + paragraphs_mid_height = mln::util::array<unsigned int>(NPar + 1); + paragraphs_mid_width.fill(0); + compute_paragraph_middle_height_(); + } + inline void compute_paragraph_middle_width() + { + paragraphs_mid_width = mln::util::array<unsigned int>(NPar + 1); + paragraphs_mid_width.fill(0); + compute_paragraph_middle_width_(); + } inline void recompute_letter_middle_space() { lines_space.fill(0); @@ -1867,7 +2473,35 @@ namespace mymln {return get_letter_middle_width(img_influ(point));} inline unsigned int get_letter_middle_width(const Label lbl) {return lines_width[lines_union[lbl]];} + + + inline bool compatible_paragraph_middle_width(const point2d& A, const point2d& B) + { return compatible_paragraph_middle_width(img_influ(A), img_influ(B));} + inline bool compatible_paragraph_middle_width(const Label A, const Label B) + { + short int LA = lines_bbox[paragraphs_first_line[paragraphs_union[A]]].len(0); + short int LB = lines_bbox[paragraphs_first_line[paragraphs_union[A]]].len(0); + if(LA > LB) + {LA = LB;} + return get_paragraph_middle_width_diff(A, B) * 8 < LA; + } + inline int get_paragraph_middle_width_diff(const point2d& A, const point2d& B) + {return get_paragraph_middle_width_diff(img_influ(A), img_influ(B));} + inline int get_paragraph_middle_width_diff(const Label A, const Label B) + { + int diff = paragraphs_mid_width[paragraphs_union[A]] - paragraphs_mid_width[paragraphs_union[B]]; + if(diff < 0){diff = -diff;} + return diff; + } + + inline unsigned int get_paragraph_middle_width(const point2d& point) + {return get_letter_paragraph_width(img_influ(point));} + inline unsigned int get_paragraph_middle_width(const Label lbl) + {return paragraphs_mid_width[paragraphs_union[lbl]];} + + inline unsigned int get_line_ID(const point2d& lbl) + {return get_line_ID(img_influ(lbl));} inline unsigned int get_line_ID(const Label lbl) { return lines_union[lbl]; @@ -1894,6 +2528,26 @@ namespace mymln if(lines_seq_pos[line_ID] == line_ID){ line_ID = 0; } line_ID = lines_seq_pos[line_ID]; } + inline void get_next_line(Label& line_ID) + { + if(lines_seq_pos[line_ID] == line_ID){ line_ID = 0; } + line_ID = lines_seq_pos[line_ID]; + } + inline unsigned int return_next_line(const Label& line_ID) + { + if(lines_seq_pos[line_ID] == line_ID){ return 0; } + return lines_seq_pos[line_ID]; + } + inline void get_previous_line(Label& line_ID) + { + if(lines_seq_pos_reverse[line_ID] == line_ID){ line_ID = 0; } + line_ID = lines_seq_pos_reverse[line_ID]; + } + inline unsigned int return_previous_line(const Label& line_ID) + { + if(lines_seq_pos_reverse[line_ID] == line_ID){ return 0; } + return lines_seq_pos_reverse[line_ID]; + } inline void get_next_letter(Label& lbl) { if(lines_seq[lbl] == lbl){ lbl = 0; } @@ -1925,7 +2579,23 @@ namespace mymln } return line; } + inline void reserve_previous_next_line() + { + lines_seq_pos = mln::util::array<unsigned int>(NLine + 1); + lines_seq_pos_reverse = mln::util::array<unsigned int>(NLine + 1); + } + inline void add_line_previous(const point2d& A,const point2d& Prev) + {add_line_previous(img_influ(A),img_influ(Prev)); } + inline void add_line_next(const point2d& A, const point2d& Next) + {add_line_next(img_influ(A),img_influ(Next)); } + inline void add_line_previous(const Label A,const Label Prev) + {lines_seq_pos_reverse[get_line_ID(A)] = get_line_ID(Prev); } + inline void add_line_next(const Label A, const Label Next) + {lines_seq_pos[get_line_ID(A)] = get_line_ID(Next); } private: + bool Enable_Debug_Buffer; + fun::i2v::array<bool> temp_letter; + fun::i2v::array<bool> implicit_separators_left_mask; fun::i2v::array<bool> implicit_separators_right_mask; mln::util::array<unsigned int> separators_len_right; @@ -1933,7 +2603,8 @@ namespace mymln mln::util::array<unsigned int> separators_middle; mln::util::array<unsigned int> separators_marging; - + bool sep_right_cooked; + bool lines_cooked; inline void cook_separators_() { implicit_separators_left_mask(0) = false; @@ -1998,6 +2669,7 @@ namespace mymln inline void cook_separators_right_() { + sep_right_cooked = true; implicit_separators_right_mask(0) = false; for(unsigned int N = 1; N < implicit_separators_union.size(); N++) { @@ -2068,6 +2740,7 @@ namespace mymln mln::util::array<unsigned int> lines_last_label; mln::util::array<unsigned int> lines_seq; mln::util::array<unsigned int> lines_seq_pos; + mln::util::array<unsigned int> lines_seq_pos_reverse; mln::util::array<box2d> lines_bbox; mln::util::array<box2d> lines_influ_bbox; mln::util::array<Label> lines_split; @@ -2206,9 +2879,11 @@ namespace mymln std::cout << count << endl; std::cout << "linear"; } - + //NOTE: THIS FUNCTION IS ONE VERY COMMON FUNCTION + // PLEASE OPTIMIZE ME inline void cook_lines_() { + lines_cooked = true; Cooked_CLine = CLine; for(unsigned int N = 1; N < lines_union.size(); N++) { @@ -2402,6 +3077,7 @@ namespace mymln fun::i2v::array<bool> containers_mask; fun::i2v::array<bool> noise_mask; fun::i2v::array<bool> kill_mask; + fun::i2v::array<bool> all_mask; mln::util::array<std::string> tag_lbl; mln::util::array<bool> Btag_lbl; @@ -2417,20 +3093,59 @@ namespace mymln unsigned int CSep ; unsigned int CSepH ; unsigned int CSepV ; + mymln::util::union_find<Label> paragraphs_union; unsigned int CPar ; unsigned int NPar ; mln::util::array<unsigned int> paragraphs_first_label; mln::util::array<unsigned int> paragraphs_last_label; + mln::util::array<unsigned int> paragraphs_mid_width; + mln::util::array<unsigned int> paragraphs_mid_height; mln::util::array<unsigned int> paragraphs_assoc; mln::util::array<unsigned int> paragraphs_len; + mln::util::array<unsigned int> paragraphs_letter_len; /* NOTE THESE ARRAYS MUST BE INITIALIZEDD WITH THE NUMBER OF PARAGRAPH */ mln::util::array<box2d> paragraphs_bbox; mln::util::array<box2d> paragraphs_bbox_influ; mln::util::array<unsigned int> paragraphs_first_line; + + + inline void compute_paragraph_middle_width_() + { + for(unsigned int N = 1; N < Areas_Number_; N++) + { + if(paragraphs_union[N]) + { + paragraphs_mid_width[paragraphs_union[N]] += _bboxgp[N].len(1); + } + } + for(unsigned int N = 1; N < paragraphs_mid_width.size() && N < paragraphs_letter_len.size(); N++) + { + if(paragraphs_letter_len[N]) + { + + paragraphs_mid_width[N] /= paragraphs_letter_len[N]; + } + } + } + inline void compute_paragraph_middle_height_() + { + for(unsigned int N = 1; N < Areas_Number_; N++) + { + if(paragraphs_union[N]) + { + paragraphs_mid_height[paragraphs_union[N]] += _bboxgp[N].len(0); + } + } + for(unsigned int N = 1; N < paragraphs_mid_height.size() && N < paragraphs_letter_len.size(); N++) + { + if(paragraphs_len[N]) + paragraphs_mid_height[N] /= paragraphs_letter_len[N]; + } + } inline void first_recognition() { @@ -2463,6 +3178,7 @@ namespace mymln if(lines_len[N] && paragraphs_union[lines_first_label[N]]) { paragraphs_len[paragraphs_union[lines_first_label[N]]]++; + paragraphs_letter_len[paragraphs_union[lines_first_label[N]]] += lines_len[N]; if(paragraphs_first_line[paragraphs_union[lines_first_label[N]]]) { if( @@ -2526,6 +3242,7 @@ namespace mymln mln::util::array<box2d> _bboxgp; + mln::util::array<box2d> _bboxgp_influ; /* DOCUMENT DATA */ g_vertices_p _area_graph; diff --git a/scribo/sandbox/raphael/code/my/document/outline.hh b/scribo/sandbox/raphael/code/my/document/outline.hh new file mode 100644 index 0000000..00d62a6 --- /dev/null +++ b/scribo/sandbox/raphael/code/my/document/outline.hh @@ -0,0 +1,87 @@ +using namespace mln; +namespace mymln +{ + namespace document + { + + + + template <typename I, typename N> + image2d<bool> outline(const Image<I>& iz_, const Neighborhood<N>& nbh_) + { + + const I& iz = exact(iz_); + const N& nbh = exact(nbh_); + + + image2d<bool> out(iz.domain()); + + mln_pixter(const I) p(iz); + mln_nixter(const I, N) n(p, nbh); + + for_all(p) + { + unsigned int count = 0; + int variate = 0; + for_all(n) + { + variate += n.val(); + count++; + } + variate /= count; + variate -= p.val(); + if(variate > 10) + { + out.element(p.offset()) = true; + } + } + + + for_all(p) + { + unsigned int count = 0; + int variate = 0; + if(out.element(p.offset())) + { + for_all(n) + { + if(out.element(n.offset())) + count++; + } + if(count == 0) + { + out.element(p.offset()) = false; + } + } + } + + + + return out; + } + + template <typename I, typename N> + image2d<value::int_u8> luminance(const Image<I>& iz_) + { + + const I& iz = exact(iz_); + + + image2d<value::int_u8> out(iz.domain()); + + mln_pixter(const I) p(iz); + for_all(p) + { + value::rgb8 V = p.val(); + out.element(p.offset()) = ( (V.red() + V.blue() + V.green()) / 9 ); + out.element(p.offset()) *= 3; + } + return out; + } + + template <typename I> + image2d<bool> binarize_outline(const Image<I>& iz_) + {return mymln::document::outline(mymln::document::luminance(iz_), c8());} + + } +} \ No newline at end of file diff --git a/scribo/sandbox/raphael/code/my/document/separator.hh b/scribo/sandbox/raphael/code/my/document/separator.hh index 2cd98ea..de3b4d0 100644 --- a/scribo/sandbox/raphael/code/my/document/separator.hh +++ b/scribo/sandbox/raphael/code/my/document/separator.hh @@ -10,12 +10,110 @@ namespace mymln { namespace separators { + //TODO: CHANGER contain_Hseparator en VSeparator Le H c etait pour le test + template<typename L, typename F, typename D> + void separators_rebuild(mymln::document::document<L,F,D>& doc) + { + typedef vertex_image<point2d,bool> v_ima_g; + typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; + v_ima_g mask = doc.fun_mask_all(); + mln_piter_(v_ima_g) v(mask.domain()); + typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t; + nbh_t nbh(mask); + mln_niter_(nbh_t) q(nbh, v); + mymln::util::union_find<L> sep_union(doc.size()); + for_all(v) + { + if(!doc[v]){continue;} + if(doc.contain_Vseparator(doc[v]) && !sep_union[doc[v]]) + { + sep_union[doc[v]] = sep_union.new_set(); + sep_union.add_self_link(doc[v]); + /*doc.debug_union(sep_union); + doc.debug_breakpoint();*/ + } + for_all(q) + { + if(doc.contain_Vseparator(doc[q])){continue;} + if(doc.contain_Vseparator(doc[v]) && + doc.separator_has(v, q)) + { + + doc.add_Vseparator(doc[q]); + doc.debug_draw_box_red_buffer(doc[q]); + sep_union[doc[q]] = sep_union[doc[v]]; + sep_union.add_link(doc[v], doc[q]); + + } + else if( + + doc.letter_ratio_XY (q) <= 1 && + doc.allign_H_large_one(q, v) && + doc.allign_proximity_top_strict(q,v) + ) + { + sep_union.add_link(doc[v], doc[q]); + } + } + } + doc.debug_union(sep_union); + sep_union.propage_links(); + for(int N = 0; N < doc.size(); N++) + { + if(sep_union[N]) + { + if(!doc.contain_Vseparator(N)) + { + doc.add_Vseparator(N); + } + } + } + + + } + template<typename L, typename F, typename D> + void separators_merge(mymln::document::document<L,F,D>& doc) + { + + typedef vertex_image<point2d,bool> v_ima_g; + typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; + v_ima_g mask = doc.fun_mask_separators(); + mln_piter_(v_ima_g) v(mask.domain()); + typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t; + nbh_t nbh(mask); + mln_niter_(nbh_t) q(nbh, v); + mymln::util::union_find<L> sep_union(doc.size()); + for_all(v) + { + if(doc.contain_separator(v)) + { + for_all(q) + { + if(doc.separator_has(v, q)) + {doc.merge_separators(v,q);} + } + } + else + { + for_all(q) + { + if(doc.separator_has(v, q)) + { + doc.add_Vseparator(doc[q]); + doc.merge_separators(v,q); + break; + } + } + } + } + + } template<typename L, typename F, typename D> void separators_find_allign(mymln::document::document<L,F,D>& doc) { typedef vertex_image<point2d,bool> v_ima_g; typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; - v_ima_g mask = doc.fun_mask_letters(); + v_ima_g mask = doc.fun_mask_all_letters(); mln_piter_(v_ima_g) v(mask.domain()); typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t; nbh_t nbh(mask); @@ -67,7 +165,7 @@ namespace mymln { typedef vertex_image<point2d,bool> v_ima_g; typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; - v_ima_g mask = doc.fun_mask_letters(); + v_ima_g mask = doc.fun_mask_all_letters(); mln_piter_(v_ima_g) v(mask.domain()); typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t; nbh_t nbh(mask); @@ -75,7 +173,7 @@ namespace mymln for_all(v) { - if(doc.contain_letter(v)) + if(doc.contain_letter(v) || doc.contain_alone_letter(v)) { doc.jump_to_separator(v); if((!doc.contain_implicit_separator(v))) @@ -92,17 +190,23 @@ namespace mymln // draw::line(out, q,v, mln::literal::blue); if(doc.allign_H_max(q,v) && doc.allign_size(q, v)) { + doc.debug_draw_line_green_buffer(v, q); doc.add_to_separator_link(v, q); All_Alone = false; } + else + {doc.debug_draw_line_red_buffer(v, q);} } else { if(doc.allign_H_max(q,v) && doc.allign_size(q, v)) { + doc.debug_draw_line_green_buffer(v, q); doc.add_to_separator_link(q, v); All_Alone = false; } + else + {doc.debug_draw_line_red_buffer(v, q);} } } if(All_Alone){doc.invalidate_implicit_separator(v);} @@ -193,14 +297,17 @@ namespace mymln if(doc.allign_V(q,v) && doc.allign_size(q, v) && doc.allign_right(q,v)) { count[doc[q]]++; + doc.debug_draw_box_red_buffer(q); + doc.debug_draw_line_red_buffer(v, q); } - } else if (doc.contain_implicit_separator(q)) { if(doc.allign_V(q,v) && doc.allign_size(q, v) && doc.allign_right(q,v) && doc.allign_proximity_strict(v, q)) { count[doc[q]]++; + doc.debug_draw_box_green_buffer(q); + doc.debug_draw_line_green_buffer(v, q); } } diff --git a/scribo/sandbox/raphael/code/my/runtime/lib.hh b/scribo/sandbox/raphael/code/my/runtime/lib.hh index 2a36ef3..b002e63 100644 --- a/scribo/sandbox/raphael/code/my/runtime/lib.hh +++ b/scribo/sandbox/raphael/code/my/runtime/lib.hh @@ -15,6 +15,9 @@ namespace mymln run.add_function("separators.make_clean_right", &(mymln::document::separators::separators_make_clean_right)); run.add_function("separators.find_allign_left", &(mymln::document::separators::separators_find_allign)); run.add_function("separators.make_clean_left", &(mymln::document::separators::separators_find_allign)); + run.add_function("separators.rebuild", &(mymln::document::separators::separators_rebuild)); + run.add_function("separators.merge", &(mymln::document::separators::separators_merge)); + } template<typename L, typename F, typename D> @@ -30,6 +33,7 @@ namespace mymln run.add_function("clean.quote_items", &(mymln::document::clean_quote_items)); run.add_function("clean.between", &(mymln::document::clean_between)); + run.add_function("clean.line_space", &(mymln::document::clean_line_space)); run.add_function("clean.line_link_item", &(mymln::document::clean_line_link_item)); run.add_function("clean.proximity_lines", &(mymln::document::clean_proximity_lines)); run.add_function("clean.quote_lines", &(mymln::document::clean_quote_lines)); @@ -45,18 +49,45 @@ namespace mymln run.add_function("clean.backward_letters", &(mymln::document::clean_backward_letters)); run.add_function("clean.paragraphs_tab", &(mymln::document::clean_paragraphs_tab)); run.add_function("clean.proximity_letters", &(mymln::document::clean_proximity_letters)); + run.add_function("clean.letter_previous_next_line", &(mymln::document::clean_letter_previous_next_line)); + run.add_function("clean.V_lines", &(mymln::document::clean_V_lines)); + run.add_function("clean.paragraphs_end_line", &(mymln::document::clean_paragraphs_end_line)); + run.add_function("find.previous_next_line", &(mymln::document::find_previous_next_line)); } template<typename L, typename F, typename D> void lib_debug_save_all(mymln::document::document<L,F,D>& doc, std::string file) { doc.debug_save_all(file); } template<typename L, typename F, typename D> + void lib_debug_save_all_separators(mymln::document::document<L,F,D>& doc, std::string file) + { doc.debug_save_all_separators(file); } + template<typename L, typename F, typename D> + void lib_debug_save_buffer_paragraphs(mymln::document::document<L,F,D>& doc, std::string file) + { doc.debug_save_buffer_paragraphs(file); } + template<typename L, typename F, typename D> + void lib_debug_save_buffer_lines(mymln::document::document<L,F,D>& doc, std::string file) + { doc.debug_save_buffer_lines(file); } + template<typename L, typename F, typename D> void lib_debug_save_buffer(mymln::document::document<L,F,D>& doc, std::string file) { doc.debug_save_buffer(file); } template<typename L, typename F, typename D> void lib_debug_create_buffer(mymln::document::document<L,F,D>& doc) { doc.debug_create_buffer(); } + template<typename L, typename F, typename D> + void lib_debug_enable_buffer(mymln::document::document<L,F,D>& doc) + { doc.debug_enable_buffer(); } + template<typename L, typename F, typename D> + void lib_debug_disable_buffer(mymln::document::document<L,F,D>& doc) + { doc.debug_disable_buffer(); } + + template<typename L, typename F, typename D> + void lib_debug_save_dot_graph(mymln::document::document<L,F,D>& doc, std::string file) + { doc.debug_save_dot_graph(file); } + + template<typename L, typename F, typename D> + void lib_debug_breakpoint(mymln::document::document<L,F,D>& doc) + { doc.debug_breakpoint(); } template<typename L, typename F, typename D> void load_debug(runtime<L,F,D>& run) @@ -64,6 +95,13 @@ namespace mymln run.add_function_string("debug.save", &(lib_debug_save_all)); run.add_function("debug.create_buffer", &(lib_debug_create_buffer)); run.add_function_string("debug.save_buffer", &(lib_debug_save_buffer)); + run.add_function_string("debug.save_dot_graph", &(lib_debug_save_dot_graph)); + run.add_function_string("debug.save_separators", &(lib_debug_save_all_separators)); + run.add_function_string("debug.save_buffer_paragraphs", &(lib_debug_save_buffer_paragraphs)); + run.add_function_string("debug.save_buffer_lines", &(lib_debug_save_buffer_lines)); + run.add_function("debug.enable_buffer", &(lib_debug_enable_buffer)); + run.add_function("debug.disable_buffer", &(lib_debug_disable_buffer)); + run.add_function("break", &(lib_debug_breakpoint)); } @@ -122,10 +160,22 @@ namespace mymln void lib_compute_letter_middle_width(mymln::document::document<L,F,D>& doc) { doc.compute_letter_middle_width(); } template<typename L, typename F, typename D> + void lib_compute_paragraph_middle_height(mymln::document::document<L,F,D>& doc) + { doc.compute_paragraph_middle_height(); } + template<typename L, typename F, typename D> + void lib_compute_paragraph_middle_width(mymln::document::document<L,F,D>& doc) + { doc.compute_paragraph_middle_width(); } + template<typename L, typename F, typename D> + void lib_compute_letter_middle_space(mymln::document::document<L,F,D>& doc) + { doc.compute_letter_middle_space(); } + template<typename L, typename F, typename D> void load_compute(runtime<L,F,D>& run) { run.add_function("compute.letter_middle_height", &(lib_compute_letter_middle_height)); run.add_function("compute.letter_middle_width", &(lib_compute_letter_middle_width)); + run.add_function("compute.letter_middle_space", &(lib_compute_letter_middle_space)); + run.add_function("compute.paragraph_middle_width", &(lib_compute_paragraph_middle_width)); + run.add_function("compute.paragraph_middle_height", &(lib_compute_paragraph_middle_height)); } diff --git a/scribo/sandbox/raphael/code/my/util/union.hh b/scribo/sandbox/raphael/code/my/util/union.hh index 90a7e68..d6e39ba 100644 --- a/scribo/sandbox/raphael/code/my/util/union.hh +++ b/scribo/sandbox/raphael/code/my/util/union.hh @@ -17,7 +17,12 @@ namespace mymln mark.fill(0); mark_link.fill(0); size_ = max_size; + Nset = 2; + Cset = 1; } + inline unsigned int new_set() + {Cset = Nset; Nset++; return Cset;} + inline void reset() { mark.fill(0); @@ -57,7 +62,7 @@ namespace mymln } else { - mark_link[A] = B; + mark_link[B] = A; } } } @@ -72,7 +77,11 @@ namespace mymln else { mark_link[B] = Pos; - mark_link[PosB] = Pos; + mark_link[A] = Pos; + if(PosB != 0) + { + mark_link[PosB] = Pos; + } } } } @@ -108,6 +117,8 @@ namespace mymln mln::util::array<unsigned int> mark; mln::util::array<unsigned int> mark_link; unsigned int size_; + unsigned int Nset; + unsigned int Cset; }; } } diff --git a/scribo/sandbox/raphael/code/test.cc b/scribo/sandbox/raphael/code/test.cc index 1f8d94d..463e598 100644 --- a/scribo/sandbox/raphael/code/test.cc +++ b/scribo/sandbox/raphael/code/test.cc @@ -2,6 +2,8 @@ #include <vector> #include <mln/io/pbm/all.hh> #include <mln/io/ppm/all.hh> +#include <mln/io/pgm/all.hh> +#include <mln/io/magick/all.hh> #include <mln/core/site_set/p_vertices.hh> #include <mln/core/image/graph_elt_window.hh> @@ -40,7 +42,7 @@ #include <my/util/vector_bbox_group.hh> #include <my/document/document.hh> #include <my/document/separator.hh> - +#include <my/document/outline.hh> #include <my/document/clean.hh> #include <my/document/recognition.hh> @@ -58,6 +60,7 @@ void Process(std::string File, std::string Dir, mymln::runtime::runtime< value:: runtime.add_variable("DEBUG_FILE", Dir + "/debug_" + File); + std::cout << "Processing : " << File << endl; /* CREATE GRAPH */ typedef value::int_u<16> uint16; @@ -103,8 +106,8 @@ void Process(std::string File, std::string Dir, mymln::runtime::runtime< value:: mymln::document::document<uint16,float,short> doc(ima_blob, ima_influ, boxes, area_grph, areas_detected); runtime.set_current_document(&doc); doc.debug_set_image(ima); - doc.vertical_separator_ratio_range(0.0f, 0.2f); - doc.horizontal_separator_ratio_range(6.0f, 1000.0f); + doc.horizontal_separator_ratio_range(0.0f, 0.2f); + doc.vertical_separator_ratio_range(6.0f, 1000.0f); doc.container_volume_range(40, 100); for (uint16 N = 1; N <= areas_detected; N++) @@ -206,12 +209,12 @@ void Process(std::string File, std::string Dir, mymln::runtime::runtime< value:: doc.recook_paragraphs(); mymln::document::clean_included_paragraphs(doc); doc.recook_paragraphs(); - std::cout << "WORK ON GRAPH : " << timer.stop() << endl; + doc.recook_lines(); */ runtime.run(); - + std::cout << "WORK ON GRAPH : " << timer.stop() << endl; @@ -265,7 +268,7 @@ int main( int argc, char** argv) else if(prog) { Prog = argv[N]; - run.load(Prog. c_str()); + run.load(Prog.c_str()); prog = false; } else -- 1.7.2.5
13 years, 3 months
1
0
0
0
last-svn-commit-886-gbb109db Add script system and recognition system. Fix some bugs
by Raphael Boissel
--- scribo/sandbox/raphael/code/makefile | 17 +- scribo/sandbox/raphael/code/my/document/clean.hh | 488 +++++++-- .../sandbox/raphael/code/my/document/document.hh | 1182 ++++++++++++++++++-- scribo/sandbox/raphael/code/my/document/letters.hh | 12 +- .../raphael/code/my/document/recognition.hh | 74 ++ .../sandbox/raphael/code/my/document/separator.hh | 64 +- scribo/sandbox/raphael/code/my/runtime/lib.hh | 180 +++ scribo/sandbox/raphael/code/my/runtime/runtime.hh | 196 ++++ scribo/sandbox/raphael/code/test.cc | 232 +++-- 9 files changed, 2157 insertions(+), 288 deletions(-) create mode 100644 scribo/sandbox/raphael/code/my/document/recognition.hh create mode 100644 scribo/sandbox/raphael/code/my/runtime/lib.hh create mode 100644 scribo/sandbox/raphael/code/my/runtime/runtime.hh diff --git a/scribo/sandbox/raphael/code/makefile b/scribo/sandbox/raphael/code/makefile index 288352e..8eddc7a 100644 --- a/scribo/sandbox/raphael/code/makefile +++ b/scribo/sandbox/raphael/code/makefile @@ -1,13 +1,18 @@ speed: - g++ test.cc -o ~/Bureau/test/bin/test.elf -I . -I ./../../../../milena -O3 -fwhole-program - ~/Bureau/test/bin/test.elf -D ~/Bureau/test/bin ima.pbm + ccache g++ test.cc -o ~/Bureau/test/bin/test.elf -I . -I ./../../../../milena -O3 -fwhole-program + ~/Bureau/test/bin/test.elf -D ~/Bureau/test/bin -P ~/Bureau/test/bin/script ima.pbm std: - g++ test.cc -o ~/Bureau/test/bin/test.elf -I . -I ./../../../../milena - ~/Bureau/test/bin/test.elf -D ~/Bureau/test/bin ima.pbm + ccache g++ test.cc -o ~/Bureau/test/bin/test.elf -I . -I ./../../../../milena + ~/Bureau/test/bin/test.elf -D ~/Bureau/test/bin -P ~/Bureau/test/bin/script ima.pbm release: - g++ test.cc -o ~/Bureau/test/bin/test.elf -I . -I ./../../../../milena -DNDEBUG -O2 - ~/Bureau/test/bin/test.elf -D ~/Bureau/test/bin ima.pbm + ccache g++ test.cc -o ~/Bureau/test/bin/test.elf -I . -I ./../../../../milena -DNDEBUG -O2 + ~/Bureau/test/bin/test.elf -D ~/Bureau/test/bin -P ~/Bureau/test/bin/script ima.pbm +debug: + ccache g++ test.cc -o ~/Bureau/test/bin/test.elf -I . -I ./../../../../milena -DNDEBUG -ggdb + ~/Bureau/test/bin/test.elf -D ~/Bureau/test/bin -P ~/Bureau/test/bin/script ima.pbm +test: + ~/Bureau/test/bin/test.elf -D ~/Bureau/test/bin -P ~/Bureau/test/bin/script ima.pbm clean: rm -r -f ../bin/* diff --git a/scribo/sandbox/raphael/code/my/document/clean.hh b/scribo/sandbox/raphael/code/my/document/clean.hh index 56c7445..b996b8a 100644 --- a/scribo/sandbox/raphael/code/my/document/clean.hh +++ b/scribo/sandbox/raphael/code/my/document/clean.hh @@ -144,7 +144,7 @@ namespace mymln if((!doc.contain_line(q))) { // draw::line(out, q,v, mln::literal::blue); - if(doc.allign_V(q,v) && doc.allign_size(q, v) && (doc.allign_proximity_large(q, v) || doc.allign_proximity_large(v, q)) ) + if(doc.allign_V(q,v) && doc.allign_size(q, v) && doc.allign_proximity_large(q, v) ) { doc.add_to_line_link(v, q); All_Alone = false; @@ -152,7 +152,7 @@ namespace mymln } else { - if(doc.allign_V(q,v) && doc.allign_size(q, v) && (doc.allign_proximity_large(q, v) || doc.allign_proximity_large(v, q))) + if(doc.allign_V(q,v) && doc.allign_size(q, v) && doc.allign_proximity_large(q, v)) { doc.add_to_line_link(q, v); All_Alone = false; @@ -186,7 +186,12 @@ namespace mymln { for_all(q) { - if(!doc.allign_H(q, v) && doc.allign_base_line(v, q)) + if( + !doc.allign_H(q, v) && + doc.allign_base_line_line_strict(v, q) && + doc.allign_proximity(v,q) && + doc.allign_smaller_line(v, q) && + doc.get_line_length(v) > 2) { doc.add_to_line_link(v, q); doc.add_letter_coerce(q); @@ -200,14 +205,21 @@ namespace mymln mln_niter_(nbh_t) q2(nbh, v2); for_all(v2) { - if(doc.contain_line(v2)) + if(doc.contain_line(v2) && !doc.contain_alone_letter(v2)) { for_all(q2) { - if (doc.allign_H_Large(v2, q2) && doc.allign_top(v2, q2)) + if ( + doc.allign_H_large(v2, q2) && + doc.allign_top(v2, q2) && + doc.line_has(v2, q2) && + doc.letter_ratio_XY(q2) < 2 && + doc.allign_size_width_large(v2, q2)) { doc.add_to_line_link(v2, q2); doc.add_letter_coerce(q2); + if(doc.allign_H(v2,q2)) + {doc.merge(v2,q2); doc.tag_label(v2, "i");} } } } @@ -216,12 +228,8 @@ namespace mymln } template<typename L, typename F, typename D> - void clean_quote_items(mymln::document::document<L,F,D>& doc, std::string dgb_out,image2d<bool> s) + void clean_quote_items(mymln::document::document<L,F,D>& doc) { - #ifndef NGRAPHDEBUG - image2d<value::rgb8> out; - mln::initialize(out, s); - #endif typedef vertex_image<point2d,bool> v_ima_g; typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; v_ima_g mask = doc.fun_mask_start_end_lines(); @@ -239,38 +247,40 @@ namespace mymln { if(doc.allign_size(v,q)) { - if(!doc.contain_alone_letter(v) && !doc.contain_alone_letter(q) ) + if(!doc.contain_alone_letter(v) && !doc.contain_alone_letter(q) && doc.allign_proximity_large_left(v,q) ) { if( - (doc.allign_top(v, q) || doc.allign_top(doc.get_beginning_of_line(v), doc.get_label(q))) + (doc.allign_top(v, q) || doc.allign_top(doc.get_beginning_of_line(v), doc.get_label(q)) ) && + doc.allign_smaller_line_letter(v,q) ) { - doc.add_to_line_link(v, q); - draw::line(out, q,v, mln::literal::green); + if(doc.get_line_length(q) < 3 || doc.allign_V_line(v, q)) + { + doc.add_to_line_link(v, q); + doc.tag_label(v, "'"); + } } } - else if(doc.allign_top(v, q) && !doc.allign_H(v, q)) - { - doc.add_to_line_link(v, q); - } - else + else if(doc.allign_top(v, q) && !doc.allign_H(v, q) && doc.allign_proximity_large_left(v,q) && doc.allign_smaller_line_letter(v,q)) { - draw::line(out, q,v, mln::literal::magenta); + if(doc.get_line_length(q) < 3 || doc.allign_V_line(v, q)) + { + doc.add_to_line_link(v, q); + doc.tag_label(v, "'"); + } } } - else if (doc.allign_H_Large(q, v) && doc.allign_top(v, q)) + else if (doc.allign_H_large(q, v) && doc.allign_top(v, q) && doc.allign_size_width_large(v, q)) { doc.add_to_line_link(v, q); - draw::line(out, q,v, mln::literal::blue); + if(doc.allign_H(v,q)) + {doc.merge(v,q); doc.tag_label(v, "i");} } } } } } - #ifndef NGRAPHDEBUG - io::ppm::save(mln::debug::superpose(out, s, literal::white),dgb_out); - #endif doc.propage_line_link(); doc.recook_lines(); } @@ -287,6 +297,7 @@ namespace mymln mln_niter_(nbh_t) q(nbh, v); for_all(v) { + if(doc.contain_letter(v)) { if(doc.contain_line(v)) @@ -303,9 +314,37 @@ namespace mymln { doc.add_to_line_link(v, q); } + } } } + } + doc.propage_line_link(); + } + + + template<typename L, typename F, typename D> + void clean_proximity_letters(mymln::document::document<L,F,D>& doc) + { + typedef vertex_image<point2d,bool> v_ima_g; + typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; + v_ima_g mask = doc.fun_mask_all_letters(); + mln_piter_(v_ima_g) v(mask.domain()); + typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t; + nbh_t nbh(mask); + mln_niter_(nbh_t) q(nbh, v); + for_all(v) + { + if(doc.contain_line(v)) + { + for_all(q) + { + if(doc.contain_line(q) && doc.get_line_length(q) == 1 && doc.line_influence_has(v,q)) + { + doc.add_to_line_link(q,v); + } + } + } } } @@ -326,33 +365,80 @@ namespace mymln { for_all(q) { - if(doc.contain_line(q)) + if(doc.same_line(q,v)){continue;} + if(doc.contain_alone_letter(q)) { - if(doc.allign_V(q,v) && doc.allign_size(q, v) && doc.allign_proximity(q,v)) + if(doc.allign_V(q,v) && doc.allign_proximity_strict(q, v) && doc.allign_size_height(q, v)) { doc.add_to_line_link(v, q); + + } + + } + else if(doc.contain_line(q)) + { + if(doc.allign_V(q,v) && doc.allign_size_height_line_strict(q, v) && doc.allign_proximity_strict(q,v)) + { + doc.add_to_line_link(v, q); + } else if(doc.allign_size_height_line(q,v)) { - if(doc.allign_proximity_line(q,v) && doc.allign_V_line(q, v)) + if(doc.allign_proximity_line(q,v) && doc.allign_V_line_strict(q, v)) { doc.add_to_line_link(v, q); + doc.debug_draw_line_green_buffer(v,q); + } + else if(doc.line_influence_reciprocal(q, v) && doc.allign_V_line_strict(q, v)) + { + doc.add_to_line_link(v, q); + doc.debug_draw_line_red_buffer(v,q); } } + + } } } } doc.propage_line_link(); } - + template<typename L, typename F, typename D> + void clean_between(mymln::document::document<L,F,D>& doc) + { + typedef vertex_image<point2d,bool> v_ima_g; + typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; + v_ima_g mask = doc.fun_mask_start_end_lines(); + mln_piter_(v_ima_g) v(mask.domain()); + typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t; + nbh_t nbh(mask); + mln_niter_(nbh_t) q(nbh, v); + for_all(v) + { + L Start = 0; + L End = 0; + for_all(q) + { + if(doc.allign_V(q,v) && doc.allign_size(q, v) && doc.allign_proximity(q,v)) + { + if(doc[q] == doc.get_beginning_of_line(q)) + {Start = doc[q]; } + else + {End = doc[q]; } + } + + } + if(Start && End){doc.add_to_line_link(Start, doc[v]);} + } + doc.propage_paragraph_link(); + + } + + + template<typename L, typename F, typename D> - void clean_paragraph_items(mymln::document::document<L,F,D>& doc, std::string dgb_out,image2d<bool> s) + void clean_paragraph_items(mymln::document::document<L,F,D>& doc) { - #ifndef NGRAPHDEBUG - image2d<value::rgb8> out; - mln::initialize(out, s); - #endif typedef vertex_image<point2d,bool> v_ima_g; typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; v_ima_g mask = doc.fun_mask_start_end_lines(); @@ -373,19 +459,22 @@ namespace mymln for_all(q) { - if(doc.allign_H_Large(q,v) && doc.allign_size(q, v) && doc.allign_proximity_V_line(v,q)) + if( + doc.allign_H_large(q,v) && + doc.allign_size_height_line(q, v) && + doc.allign_proximity_V_line(v,q) && + doc.allign_size_width_line(q, v) + ) { if(doc.contain_paragraph(q)) { doc.add_to_paragraph(q); doc.add_to_paragraph_link(q, v); - draw::line(out, q,v, mln::literal::green); } else { doc.add_to_paragraph(q); doc.add_to_paragraph_link(v, q); - draw::line(out, q,v, mln::literal::magenta); } } @@ -398,8 +487,9 @@ namespace mymln { if( doc.get_beginning_of_line(q) == doc[q] && - doc.allign_H_Large(q,v) && - doc.allign_size(q, v) && + doc.allign_H_large(q,v) && + doc.allign_size_height_line(q, v) && + doc.allign_size_width_line(q, v) && doc.allign_proximity_V_line(v,q) && doc.allign_bottom_line(q,v) ) @@ -416,7 +506,6 @@ namespace mymln { doc.add_to_paragraph_link(v, q); } - draw::line(out, q,v, mln::literal::blue); } else { @@ -427,7 +516,6 @@ namespace mymln } doc.add_to_paragraph(q); doc.add_to_paragraph_link(v, q); - draw::line(out, q,v, mln::literal::blue); } } } @@ -435,7 +523,6 @@ namespace mymln } } } - io::ppm::save(mln::debug::superpose(out, s, literal::white),dgb_out); doc.propage_paragraph_link(); } @@ -473,10 +560,10 @@ namespace mymln doc.propage_line_link(); } template<typename L, typename F, typename D> - void clean_alone_letters_lines(mymln::document::document<L,F,D>& doc, std::string dgb_out,image2d<bool> s) + void clean_alone_letters_lines(mymln::document::document<L,F,D>& doc) { - image2d<value::rgb8> out; - mln::initialize(out, s); + //image2d<value::rgb8> out; + //mln::initialize(out, s); typedef vertex_image<point2d,bool> v_ima_g; typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; v_ima_g mask = doc.fun_mask_alone_letters(); @@ -490,38 +577,303 @@ namespace mymln { for_all(q) { - draw::line(out, q,v, mln::literal::red); - if(doc.line_has(v,q)) - {doc.add_to_line_link(v, q); draw::line(out, q,v, mln::literal::green);} - + //draw::line(out, q,v, mln::literal::red); + if( + ((doc.line_influence_has(v,q) && doc.is_line_representative(q)) || + doc.line_has(v,q)) && + doc.allign_V(v, q) + ) + {doc.add_to_line_link(v, q);} + else if(doc.line_has(v,q)) + {doc.add_to_line_link(v, q);} } } } doc.propage_line_link(); - io::ppm::save(mln::debug::superpose(out, s, literal::white),dgb_out); + //io::ppm::save(mln::debug::superpose(out, s, literal::white),dgb_out); + } + + template<typename L, typename F, typename D> + void remove_alone_letter(mymln::document::document<L,F,D>& doc) + { + typedef vertex_image<point2d,bool> v_ima_g; + typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; + v_ima_g mask = doc.fun_mask_alone_letters(); + mln_piter_(v_ima_g) v(mask.domain()); + typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t; + nbh_t nbh(mask); + mln_niter_(nbh_t) q(nbh, v); + for_all(v) + { + for_all(q) + { + if(doc.in_header(q) || doc.in_footer(q)){continue;} + if(doc.contain_alone_letter(q)) {doc.add_noise(q);} + } + } + } + + template<typename L, typename F, typename D> + void clean_odd_letters(mymln::document::document<L,F,D>& doc) + { + for(unsigned int N = 1;N < doc.count(); N++) + { + if(doc.contain_line(N)) + if (doc.get_letter_middle_height(N) * 3 < doc.get_bbox(N).len(0)) + doc.add_noise(N); + else if(doc.get_letter_middle_width(N) * 4 < doc.get_bbox(N).len(1)) + doc.add_noise(N); + } + } + + template<typename L, typename F, typename D> + void clean_paragraphs_up(mymln::document::document<L,F,D>& doc) + { + typedef vertex_image<point2d,bool> v_ima_g; + typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; + v_ima_g mask = doc.fun_mask_letters(); + mln_piter_(v_ima_g) v(mask.domain()); + typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t; + nbh_t nbh(mask); + mln_niter_(nbh_t) q(nbh, v); + for_all(v) + { + if(doc.contain_paragraph(v)) + { + for_all(q) + { + if( + doc.contain_paragraph(q) && + !doc.same_paragraph(v, q) && + doc.allign_top_paragraph(q, v) && + doc.decal_left_paragraph(q, v) && + doc.allign_size_height_line(q, v) && + doc.allign_size_width_paragraph(q, v) && + doc.get_paragraph_length(v) == 1 && + doc.allign_H_paragraph(v, q) && + doc.allign_proximity_V_line(v,q) + ) + { + doc.add_to_paragraph_link(q,v); + } + } + } + } + doc.propage_paragraph_link(); + } + + template<typename L, typename F, typename D> + void clean_paragraphs_large(mymln::document::document<L,F,D>& doc) + { + typedef vertex_image<point2d,bool> v_ima_g; + typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; + v_ima_g mask = doc.fun_mask_letters(); + mln_piter_(v_ima_g) v(mask.domain()); + typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t; + nbh_t nbh(mask); + mln_niter_(nbh_t) q(nbh, v); + for_all(v) + { + if(doc.contain_paragraph(v) && doc.get_paragraph_length(v) > 1) + { + for_all(q) + { + if( + doc.contain_paragraph(q) && + doc.get_paragraph_length(q) > 1 && + !doc.same_paragraph(v, q) && + doc.allign_top_paragraph(q, v)) + { + + if( + doc.decal_left_paragraph_strong(q, v) && + doc.allign_size_height_line(q, v) && + doc.allign_size_width_paragraph(q, v) && + doc.allign_H_paragraph(v, q) && + doc.allign_proximity_V_line(v,q) + ) + { + doc.add_to_paragraph_link(q,v); + + } + } + } + } + } + doc.propage_paragraph_link(); + + + + } + template<typename L, typename F, typename D> + void clean_included_paragraphs(mymln::document::document<L,F,D>& doc) + { + typedef vertex_image<point2d,bool> v_ima_g; + typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; + v_ima_g mask = doc.fun_mask_letters(); + mln_piter_(v_ima_g) v(mask.domain()); + typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t; + nbh_t nbh(mask); + mln_niter_(nbh_t) q(nbh, v); + for_all(v) + { + if(doc.contain_paragraph(v) && doc.get_paragraph_length(v) > 1) + { + for_all(q) + { + if( + doc.contain_paragraph(q) && + doc.get_paragraph_length(q) == 1 && + !doc.same_paragraph(q, v) && + doc.paragraph_included_influence(v, q) && + doc.allign_size_height_line(v, q)) + { + if(doc.line_influence_reciprocal(q, v)) + doc.add_to_paragraph_link(v,q); + } + } + } + } + doc.propage_paragraph_link(); + } + + template<typename L, typename F, typename D> + void clean_lines_space(mymln::document::document<L,F,D>& doc, std::string dgb_out,image2d<bool> s) + { + image2d<value::rgb8> out; + mln::initialize(out, s); + typedef vertex_image<point2d,bool> v_ima_g; + typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; + v_ima_g mask = doc.fun_mask_letters(); + mln_piter_(v_ima_g) v(mask.domain()); + typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t; + nbh_t nbh(mask); + mln_niter_(nbh_t) q(nbh, v); + for_all(v) + { + for_all(q) + { + if(doc.same_line(q, v)) + { + draw::line(out, q,v, mln::literal::red); + if(doc.in_beginning_of_line(q) || doc.in_end_of_line(q)) + { + draw::line(out, q,v, mln::literal::green); + if(doc.space(q, v) > doc.get_letter_middle_space(q) * 10) + { + draw::line(out, q,v, mln::literal::blue); + /*if(doc[q] == doc.get_beginning_of_line(q)) + doc.add_to_line_link(v, q); */ + //doc.add_noise(q); + } + } + } + } + } + doc.propage_line_link(); + io::ppm::save(mln::debug::superpose(out, s, literal::white),dgb_out); + } + + + template<typename L, typename F, typename D> + void clean_included_letters(mymln::document::document<L,F,D>& doc) + { + + typedef vertex_image<point2d,bool> v_ima_g; + typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; + v_ima_g mask = doc.fun_mask_all_letters(); + mln_piter_(v_ima_g) v(mask.domain()); + typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t; + nbh_t nbh(mask); + mln_niter_(nbh_t) q(nbh, v); + for_all(v) + { + for_all(q) + { + if(doc.letter_included(q, v) && doc.allign_size_large_inside(q, v)) + { + + + doc.merge(q,v); + } + } + } + doc.propage_line_link(); + } + + template<typename L, typename F, typename D> - void remove_alone_letter(mymln::document::document<L,F,D>& doc) + void clean_backward_letters(mymln::document::document<L,F,D>& doc) { - typedef vertex_image<point2d,bool> v_ima_g; - typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; - v_ima_g mask = doc.fun_mask_alone_letters(); - mln_piter_(v_ima_g) v(mask.domain()); - typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t; - nbh_t nbh(mask); - mln_niter_(nbh_t) q(nbh, v); - for_all(v) - { - for_all(q) - { - if(doc.in_header(q) || doc.in_footer(q)){continue;} - doc.add_noise(q); - } - } + typedef vertex_image<point2d,bool> v_ima_g; + typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; + v_ima_g mask = doc.fun_mask_start_lines(); + mln_piter_(v_ima_g) v(mask.domain()); + typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t; + nbh_t nbh(mask); + mln_niter_(nbh_t) q(nbh, v); + for_all(v) + { + if(!doc.contain_line(v)) + { + for_all(q) + { + if( + doc.contain_line(q) && + doc.get_line_length(q)> 5 && + doc.allign_V(v, q) && + doc.allign_proximity(v, q) && + doc.allign_size_height(v, q) + ) + { + doc.add_to_line_link(q,v); + doc.debug_draw_line_green_buffer(v, q); + } + } + } + } + doc.propage_line_link(); } - - + + template<typename L, typename F, typename D> + void clean_paragraphs_tab(mymln::document::document<L,F,D>& doc) + { + typedef vertex_image<point2d,bool> v_ima_g; + typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; + v_ima_g mask = doc.fun_mask_all_letters(); + mln_piter_(v_ima_g) v(mask.domain()); + typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t; + nbh_t nbh(mask); + mln_niter_(nbh_t) q(nbh, v); + for_all(v) + { + if(doc.contain_paragraph(v)) + { + for_all(q) + { + if( + doc.contain_paragraph(q) && + !doc.same_paragraph(q,v) && + !doc.paragraph_start_with_tab(q) && + doc.allign_top_paragraph(q, v) && + doc.get_paragraph_length(q) > 1 && + doc.get_first_line_ID(doc[q]) == doc.get_line_ID(doc[q]) && + doc.allign_size_width_paragraph(q,v) && + doc.allign_proximity_paragraph_up(q,v) && + doc.allign_H_paragraph(q,v) + ) + { + doc.add_to_paragraph_link(q,v); + doc.debug_draw_line_green_buffer(v, q); + } + } + } + } + doc.propage_paragraph_link(); + } + } } diff --git a/scribo/sandbox/raphael/code/my/document/document.hh b/scribo/sandbox/raphael/code/my/document/document.hh index 1a84edb..880d4c5 100644 --- a/scribo/sandbox/raphael/code/my/document/document.hh +++ b/scribo/sandbox/raphael/code/my/document/document.hh @@ -40,7 +40,7 @@ namespace mymln // WARNING: Methods on lines like get_end_of_line can be used only after a line cooking. - + document(){} document(image2d<Label>& ima, image2d<Label>& ima_influ,mln::util::array<box2d>& bboxgp, g_vertices_p& area_graph, Label Areas) { img = ima; @@ -56,17 +56,19 @@ namespace mymln alone_letters_mask = fun::i2v::array<bool>(Areas + 1); implicit_separators_left_mask = fun::i2v::array<bool>(Areas + 1); implicit_separators_right_mask = fun::i2v::array<bool>(Areas + 1); + kill_mask = fun::i2v::array<bool>(Areas + 1); CImpSep = 1; NImpSep = 2; lines_union = mymln::util::union_find<Label>(Areas + 1); implicit_separators_union = mymln::util::union_find<Label>(Areas + 1); - + debug_buffer_enable = false; paragraphs_union = mymln::util::union_find<Label>(Areas + 1); tag_lbl = mln::util::array<std::string>(Areas + 1); + Btag_lbl = mln::util::array<bool>(Areas + 1); lines_split = mln::util::array<Label>(Areas + 1); lines_split.fill(0); - + tag_lbl.fill(""); img_influ = ima_influ; CSep = 0; CSepH = 0; @@ -79,6 +81,8 @@ namespace mymln Areas_Number_ = Areas + 1; } + inline unsigned int count() + {return Areas_Number_;} /* OPERATION ON PAGE */ inline bool in_header(const point2d& p) { return p[0] < (img_influ.domain().len(0) / 8);} @@ -93,16 +97,28 @@ namespace mymln /* OPERATION ON PARAGRAPH */ inline bool link_paragraphs() { - for(unsigned int N = 1; N < Areas_Number_; N++) - { + paragraphs_union[0] = 0; + for(unsigned int N = 1; N < Areas_Number_; N++) + { paragraphs_union.invalidate_link(N); - if(start_lines_mask(N)) + if (!contain_paragraph(N) && contain_line(N)) { - paragraphs_union.add_self_link(N); + jump_to_paragraph(N); + if(start_lines_mask(N)) + { + add_to_paragraph(N); + paragraphs_union.add_self_link(N); + } } - else if(contain_line(N)) + } + for(unsigned int N = 1; N < Areas_Number_; N++) + { + + if (!contain_paragraph(N) && contain_line(N)) { - if(get_beginning_of_line(N) == 0){std::cout <<"ERROR#\n";} + jump_to_paragraph(get_beginning_of_line(N)); + add_to_paragraph(N); + if(contain_line(N) && get_beginning_of_line(N) != 0) paragraphs_union.add_link(get_beginning_of_line(N), N); } } @@ -200,12 +216,14 @@ namespace mymln inline void cook_line_splitting_exclusive() { + std::cout << "--> start union exclusive" << std::endl; for(unsigned int N = 1; N < Areas_Number_; N++) { lines_union.invalidate_link(N); if(end_lines_mask(N) || implicit_separators_right_mask(N)) split_line_exclusive(N); } + std::cout << "--> start linking" << std::endl; for(unsigned int N = 1; N < Areas_Number_; N++) { if(lines_union.is_self_link(N)) @@ -221,17 +239,19 @@ namespace mymln } lines_union[0] = 0; lines_union.invalidate_link(0); + std::cout << "--> propage union " << std::endl; for(unsigned int N = 1; N < Areas_Number_; N++) { if(!contain_line(N) || lines_union.is_self_link(N)) continue; Label pos = get_end_of_line(N); - while(lines_split[pos] && _bboxgp[lines_split[pos]].pmin()[1] > _bboxgp[N].pmin()[1]) - pos = lines_split[pos]; - if(pos != 0) + Label oldpos = pos; + while(lines_split[pos] && _bboxgp[lines_split[pos]].pmin()[1] >= _bboxgp[N].pmin()[1]) + {oldpos = pos; pos = lines_split[pos];} + if(pos != 0 && pos != N && pos < Areas_Number_ ) {lines_union[N] = lines_union[pos]; lines_union.add_link(pos,N);} } - + std::cout << "--> end propage union " << std::endl; //lines_union.propage_links();lines_union cook_lines(); } @@ -266,10 +286,9 @@ namespace mymln Label pos = get_beginning_of_line(N); while(lines_split[pos] && _bboxgp[lines_split[pos]].pmin()[1] < _bboxgp[N].pmin()[1]) pos = lines_split[pos]; - if(pos != 0) + if(pos != 0 && pos != N && pos < Areas_Number_ ) {lines_union[N] = lines_union[pos]; lines_union.add_link(pos,N);} } - //lines_union.propage_links();lines_union cook_lines(); } @@ -285,6 +304,46 @@ namespace mymln { return same_line(img_influ(A), img_influ(B)); } inline bool same_line(const Label A, const Label B) { return lines_union[A] == lines_union[B]; } + inline bool same_paragraph(const point2d& A, const point2d& B) + { return same_paragraph(img_influ(A), img_influ(B)); } + inline bool same_paragraph(const Label A, const Label B) + { return paragraphs_union[A] == paragraphs_union[B]; } + + inline bool in_beginning_of_line(const point2d& A) + {return in_beginning_of_line(img_influ(A));} + inline bool in_beginning_of_line(const Label A) + {return lines_bbox[lines_union[A]].len(1) / 8 + lines_bbox[lines_union[A]].pmin()[1] > _bboxgp[A].pmax()[1];} + + + inline bool is_line_representative(const point2d& A) + {return is_line_representative(img_influ(A));} + inline bool is_line_representative(const Label A) + {return lines_bbox[lines_union[A]].len(0) < _bboxgp[A].len(0) * 2 ;} + + + inline bool in_end_of_line(const point2d& A) + {return in_end_of_line(img_influ(A));} + inline bool in_end_of_line(const Label A) + {return lines_bbox[lines_union[A]].pmax()[1] - lines_bbox[lines_union[A]].len(1) / 8 < _bboxgp[A].pmax()[1];} + + inline unsigned int space(const point2d& A,const point2d& B) + {return space(img_influ(A), img_influ(B));} + inline unsigned int space(const Label A, const Label B) + { + box2d LB = _bboxgp[A]; + box2d RB = _bboxgp[B]; + + int DisA = LB.pmax()[1] - RB.pmin()[1]; + int DisB = RB.pmax()[1] - LB.pmin()[1]; + if(DisA < 0){DisA = -DisA;} + if(DisB < 0){DisB = -DisB;} + if(DisA > DisB) + { DisA = DisB; } + return DisA; + } + + + inline void add_new_line(const point2d& point) { add_new_line(img_influ(point)); } @@ -351,6 +410,7 @@ namespace mymln /* SET UP SPECIAL MASK TO FALSE */ implicit_separators_left_mask(lbl) = false; implicit_separators_right_mask(lbl) = false; + kill_mask(lbl) = false; } void inline invalid_letter(const point2d& point) {invalid_letter(img_influ(point));} @@ -400,8 +460,9 @@ namespace mymln void add_letter(const Label lbl) { CLet++; - if(label_valid_size_Min_(lbl, 2)) + if(label_valid_size_Min_(lbl, 3) || label_valid_size_Min_Large_(lbl, 2)) { + img_influ(_bboxgp[lbl].pcenter()) = lbl; letters_mask(lbl) = true; all_letters_mask(lbl) = true; separators_mask(lbl) = false; @@ -519,6 +580,15 @@ namespace mymln inline bool allign_top( const point2d& Left, const point2d& Right) {return allign_top(img_influ(Left), img_influ(Right));} + inline bool allign_top_line( const point2d& Left, const point2d& Right) + {return allign_top_line(img_influ(Left), img_influ(Right));} + + inline bool allign_top_line( const Label Left, const Label Right) + { + short int allignV = lines_bbox[lines_union[Left]].pcenter()[0] - lines_bbox[lines_union[Right]].pcenter()[0]; + return (!allignV < 0) && allignV * 2 > lines_bbox[lines_union[Left]].len(0); + } + inline bool allign_top( const Label Left, const Label Right) { short int allignV = label_allign_(0, Left, Right); @@ -535,6 +605,10 @@ namespace mymln return allignV < label_size_(0, Left) && (_bboxgp[Left].pcenter()[0]) > (_bboxgp[Right].pcenter()[0]); } + + + + inline bool allign_up_line_line( const point2d& Left, const point2d& Right) {return allign_up_line_line(img_influ(Left), img_influ(Right));} @@ -548,10 +622,30 @@ namespace mymln (lines_bbox[lines_union[Left]].pcenter()[0]) > (lines_bbox[lines_union[Left]].pcenter()[0]); } - inline bool allign_H_Large( const point2d& Left, const point2d& Right) - {return allign_H_Large(img_influ(Left), img_influ(Right));} + inline bool allign_left( const point2d& Left, const point2d& Right) + {return allign_left(img_influ(Left), img_influ(Right));} + + inline bool allign_left( const Label Left, const Label Right) + { + + return _bboxgp[Left].pmin()[0] > _bboxgp[Right].pmin()[0]; + } + + inline bool allign_right( const point2d& Left, const point2d& Right) + {return allign_right(img_influ(Left), img_influ(Right));} + + inline bool allign_right( const Label Left, const Label Right) + { + + return _bboxgp[Left].pmin()[0] < _bboxgp[Right].pmin()[0]; + } + + - inline bool allign_H_Large( const Label Left, const Label Right) + inline bool allign_H_large( const point2d& Left, const point2d& Right) + {return allign_H_large(img_influ(Left), img_influ(Right));} + + inline bool allign_H_large( const Label Left, const Label Right) { short int allignV = label_allign_(1, Left, Right) * 1.5f; return allignV < label_size_(1, Left); @@ -610,20 +704,80 @@ namespace mymln inline bool allign_proximity( const Label Left, const Label Right) { - short int SizeL0 = label_size_(0, Left); - short int SizeL1 = label_size_(1, Left); - short int Swap = 0; - if(SizeL0 < SizeL1) - { SizeL0 = SizeL1; } - short int Dis = _bboxgp[Left].pmin()[1] - _bboxgp[Right].pmin()[1]; - if(Dis < 0) - Dis = -Dis; - return Dis < SizeL0 * 1.5f; + box2d LB = _bboxgp[Left]; + box2d RB = _bboxgp[Right]; + + int DisA = LB.pmax()[1] - RB.pmin()[1]; + int DisB = RB.pmax()[1] - LB.pmin()[1]; + if(DisA < 0){DisA = -DisA;} + if(DisB < 0){DisB = -DisB;} + if(DisA > DisB) + { DisA = DisB; } + + unsigned int HA = LB.len(0); + unsigned int HB = LB.len(1); + + if(HB > HA) + { HA = HB; } + return (DisA * 2) < HA * 3; } - inline bool allign_proximity_line( const point2d& Left, const point2d& Right) - {return allign_proximity_line(img_influ(Left), img_influ(Right));} + + + + inline bool allign_proximity_strict( const point2d& Left, const point2d& Right) + {return allign_proximity_strict(img_influ(Left), img_influ(Right));} + + inline bool allign_proximity_strict( const Label Left, const Label Right) + { + box2d LB = _bboxgp[Left]; + box2d RB = _bboxgp[Right]; + + int DisA = LB.pmax()[1] - RB.pmin()[1]; + int DisB = RB.pmax()[1] - LB.pmin()[1]; + if(DisA < 0){DisA = -DisA;} + if(DisB < 0){DisB = -DisB;} + if(DisA > DisB) + { DisA = DisB; } + + unsigned int HA = LB.len(0); + unsigned int HB = RB.len(0); + unsigned int VA = LB.len(1); + unsigned int VB = RB.len(1); + + if(VA > HA) + { HA = VA; } + if(VB > HB) + { HB = VB; } + return (DisA * 2) < HA && (DisA * 2) < HB; + } + + + inline bool allign_proximity_paragraph_up( const point2d& Left, const point2d& Right) + {return allign_proximity_paragraph_up(img_influ(Left), img_influ(Right));} + + inline bool allign_proximity_paragraph_up( const Label Left, const Label Right) + { + box2d LB = paragraphs_bbox[paragraphs_union[Left]]; + box2d RB = paragraphs_bbox[paragraphs_union[Right]]; + + int DisA = LB.pmax()[0] - RB.pmin()[0]; + int DisB = RB.pmax()[0] - LB.pmin()[0]; + if(DisA < 0){DisA = -DisA;} + if(DisB < 0){DisB = -DisB;} + if(DisA > DisB) + { DisA = DisB; } + + unsigned int HA = lines_bbox[paragraphs_first_line[paragraphs_union[Left]]].len(0); + unsigned int HB = lines_bbox[paragraphs_first_line[paragraphs_union[Right]]].len(0); + if(HA < HB) + { HA = HB; } + return (DisA * 5) < HA; + } + + inline bool allign_proximity_line_large( const point2d& Left, const point2d& Right) + {return allign_proximity_line_large(img_influ(Left), img_influ(Right));} inline bool allign_size_height_line( const point2d& Left, const point2d& Right) { @@ -637,6 +791,61 @@ namespace mymln return SizeR > (SizeL / 2.2f) && SizeR < (SizeL * 2.2); } + inline bool allign_size_height_line_strict( const point2d& Left, const point2d& Right) + { + return allign_size_height_line_strict(img_influ(Left), img_influ(Right)); + } + + inline bool allign_size_height_line_strict( const Label Left, const Label Right) + { + short int SizeL = lines_bbox[lines_union[Left]].len(0); + short int SizeR = lines_bbox[lines_union[Right]].len(0); + return SizeR > (SizeL / 1.3f) && SizeR < (SizeL * 1.3); + } + + inline bool allign_proximity_line( const point2d& Left, const point2d& Right) + {return allign_proximity_line(img_influ(Left), img_influ(Right));} + + inline bool allign_size_width_large( const point2d& Left, const point2d& Right) + { + return allign_size_width_large(img_influ(Left), img_influ(Right)); + } + + inline bool allign_size_width_large( const Label Left, const Label Right) + { + short int SizeL = _bboxgp[lines_union[Left]].len(1); + short int SizeR = _bboxgp[lines_union[Right]].len(1); + return SizeR >= (SizeL / 5) && SizeR <= (SizeL * 5); + } + + + + + inline bool allign_size_width_line( const point2d& Left, const point2d& Right) + { + return allign_size_width_line(img_influ(Left), img_influ(Right)); + } + + inline bool allign_size_width_line( const Label Left, const Label Right) + { + short int SizeL = lines_bbox[lines_union[Left]].len(1); + short int SizeR = lines_bbox[lines_union[Right]].len(1); + return SizeR > (SizeL / 4) && SizeR < (SizeL * 4); + } + + inline bool allign_size_width_paragraph( const point2d& Left, const point2d& Right) + { + return allign_size_width_paragraph(img_influ(Left), img_influ(Right)); + } + + inline bool allign_size_width_paragraph( const Label Left, const Label Right) + { + short int SizeL = paragraphs_bbox[paragraphs_union[Left]].len(1); + short int SizeR = paragraphs_bbox[paragraphs_union[Right]].len(1); + return SizeR > ((SizeL * 2) / 3) && SizeR < ((SizeL * 3) / 2); + } + + inline bool allign_proximity_line( const Label Left, const Label Right) { box2d LB = lines_bbox[lines_union[Left]]; @@ -658,6 +867,27 @@ namespace mymln } + inline bool allign_proximity_line_large( const Label Left, const Label Right) + { + box2d LB = lines_bbox[lines_union[Left]]; + box2d RB = lines_bbox[lines_union[Right]]; + + int DisA = LB.pmax()[1] - RB.pmin()[1]; + int DisB = RB.pmax()[1] - LB.pmin()[1]; + if(DisA < 0){DisA = -DisA;} + if(DisB < 0){DisB = -DisB;} + if(DisA > DisB) + { DisA = DisB; } + + unsigned int HA = LB.len(0); + unsigned int HB = RB.len(0); + + if(HA < HB) + { HA = HB; } + return (DisA * 2) < HA; + } + + inline bool allign_proximity_V_line( const point2d& Left, const point2d& Right) {return allign_proximity_V_line(img_influ(Left), img_influ(Right));} @@ -680,21 +910,93 @@ namespace mymln { HA = HB; } return (DisA * 1.5f) < HA; } + + inline bool allign_H_paragraph( const point2d& Left, const point2d& Right) + {return allign_H_paragraph(img_influ(Left), img_influ(Right));} + inline bool allign_H_paragraph( const Label Left, const Label Right ) + { + short int Dis = paragraphs_bbox[paragraphs_union[Left]].pcenter()[1] - paragraphs_bbox[paragraphs_union[Right]].pcenter()[1]; + if(Dis < 0){Dis = -Dis;} + return + Dis * 2 < paragraphs_bbox[paragraphs_union[Right]].len(1) && + Dis * 2 < paragraphs_bbox[paragraphs_union[Left]].len(1); + } + + inline bool allign_top_paragraph( const point2d& Left, const point2d& Right) + {return allign_top_paragraph(img_influ(Left), img_influ(Right));} + inline bool allign_top_paragraph( const Label Left, const Label Right ) + {return paragraphs_bbox[paragraphs_union[Left]].pmin()[0] > paragraphs_bbox[paragraphs_union[Right]].pmax()[0]; } + + inline bool decal_left_paragraph(const point2d& Left, const point2d& Right) + {return decal_left_paragraph(img_influ(Left), img_influ(Right));} + inline bool decal_left_paragraph( const Label Left, const Label Right ) + { + return paragraphs_bbox[paragraphs_union[Left]].pmin()[1] > paragraphs_bbox[paragraphs_union[Right]].pmin()[1] + + (paragraphs_bbox[paragraphs_union[Right]].len(1) / 40) ; + } + + inline bool decal_left_paragraph_strong(const point2d& Left, const point2d& Right) + {return decal_left_paragraph_strong(img_influ(Left), img_influ(Right));} + inline bool decal_left_paragraph_strong( const Label Left, const Label Right ) + { + return paragraphs_bbox[paragraphs_union[Left]].pmin()[1] > paragraphs_bbox[paragraphs_union[Right]].pmin()[1] + + (paragraphs_bbox[paragraphs_union[Right]].len(1) / 20) ; + } + + + inline bool allign_proximity_large_left( const point2d& Left, const point2d& Right) + {return allign_proximity_large_left(img_influ(Left), img_influ(Right));} + inline bool allign_proximity_large_left( const Label Left, const Label Right) + { + box2d LB = _bboxgp[Left]; + box2d RB = _bboxgp[Right]; + + int DisA = LB.pmax()[1] - RB.pmin()[1]; + int DisB = RB.pmax()[1] - LB.pmin()[1]; + if(DisA < 0){DisA = -DisA;} + if(DisB < 0){DisB = -DisB;} + if(DisA > DisB) + { DisA = DisB; } + + unsigned int HA = LB.len(0); + unsigned int HB = RB.len(0); + unsigned int VA = LB.len(1); + unsigned int VB = RB.len(1); + + if(VA > HA) + { HA = VA; } + if(VB > HB) + { HB = VB; } + return (DisA) < HA * 2; + } + + inline bool allign_proximity_large( const point2d& Left, const point2d& Right) {return allign_proximity_large(img_influ(Left), img_influ(Right));} inline bool allign_proximity_large( const Label Left, const Label Right) { - short int SizeL0 = label_size_(0, Left); - short int SizeL1 = label_size_(1, Left); - short int Swap = 0; - if(SizeL0 < SizeL1) - { SizeL0 = SizeL1; } - short int Dis = _bboxgp[Left].pmin()[1] - _bboxgp[Right].pmin()[1]; - if(Dis < 0) - Dis = -Dis; - return Dis < SizeL0 * 3; + box2d LB = _bboxgp[Left]; + box2d RB = _bboxgp[Right]; + + int DisA = LB.pmax()[1] - RB.pmin()[1]; + int DisB = RB.pmax()[1] - LB.pmin()[1]; + if(DisA < 0){DisA = -DisA;} + if(DisB < 0){DisB = -DisB;} + if(DisA > DisB) + { DisA = DisB; } + + unsigned int HA = LB.len(0); + unsigned int HB = RB.len(0); + unsigned int VA = LB.len(1); + unsigned int VB = RB.len(1); + + if(VA > HA) + { HA = VA; } + if(VB > HB) + { HB = VB; } + return (DisA) < HA * 2 && (DisA) < HB * 2; } @@ -705,7 +1007,23 @@ namespace mymln short int SizeR = label_size_(0, Right); return SizeR > (SizeL / 3) && SizeR < (SizeL * 3); } + + inline bool allign_size_strict( const point2d& Left, const point2d& Right) + {return allign_size(img_influ(Left), img_influ(Right));} + inline bool allign_size_strict( const Label Left, const Label Right) + { + short int SizeL0 = label_size_(0, Left); + short int SizeR0 = label_size_(0, Right); + short int SizeL1 = label_size_(1, Left); + short int SizeR1 = label_size_(1, Right); + short int Swap = 0; + if(SizeL0 < SizeL1) + { SizeL0 = SizeL1; } + if(SizeR0 < SizeR1){SizeR0 = SizeR1;} + return SizeR0 > (SizeL0 / 2) && SizeR0 < (SizeL0 * 2); + } + inline bool allign_size( const point2d& Left, const point2d& Right) {return allign_size(img_influ(Left), img_influ(Right));} @@ -754,6 +1072,18 @@ namespace mymln return allignV < lines_bbox[lines_union[Left]].len(0) && allignV < lines_bbox[lines_union[Right]].len(0); } + inline bool allign_V_line_strict( const point2d& Left, const point2d& Right) + {return allign_V_line_strict(img_influ(Left), img_influ(Right));} + + inline bool allign_V_line_strict( Label Left, Label Right) + { + short int allignV = lines_bbox[lines_union[Left]].pcenter()[0] - lines_bbox[lines_union[Right]].pcenter()[0]; + if(allignV<0){allignV = -allignV;} + allignV *= 4; + return allignV < lines_bbox[lines_union[Left]].len(0) && allignV < lines_bbox[lines_union[Right]].len(0); + } + + inline bool allign_center_line( const point2d& Left, const point2d& Right) {return allign_center_line(img_influ(Left), img_influ(Right));} inline bool allign_center_line( Label Left, Label Right) @@ -762,6 +1092,7 @@ namespace mymln if(allignC<0){allignC = -allignC;} return allignC * 5 < lines_bbox[lines_union[Left]].len(0); } + inline bool allign_smaller_line( const point2d& Left, const point2d& Right) {return allign_smaller_line(img_influ(Left), img_influ(Right));} @@ -770,6 +1101,12 @@ namespace mymln return lines_bbox[lines_union[Left]].len(0) > (lines_bbox[lines_union[Right]].len(0) * 2); } + inline bool allign_smaller_line_letter( const point2d& Left, const point2d& Right) + {return allign_smaller_line_letter(img_influ(Left), img_influ(Right));} + inline bool allign_smaller_line_letter( Label Left, Label Right) + { + return lines_bbox[lines_union[Left]].len(0) > (_bboxgp[Right].len(0) * 1.5f); + } inline bool allign_V_large( const point2d& Left, const point2d& Right) {return allign_V_large(img_influ(Left), img_influ(Right));} @@ -801,6 +1138,18 @@ namespace mymln allignV < lines_bbox[lines_union[Left]].len(0) && lines_bbox[lines_union[Left]].pcenter()[0] < lines_bbox[lines_union[Right]].pcenter()[0]; } + inline bool allign_base_line_line_strict(const point2d& Left, const point2d& Right) + {return allign_base_line_line_strict(img_influ(Left), img_influ(Right));} + inline bool allign_base_line_line_strict(const Label Left, const Label Right) + { + short int allignV = lines_bbox[lines_union[Left]].pcenter()[0] - _bboxgp[Right].pcenter()[0]; + if(allignV<0){allignV = -allignV;} + allignV *= 3; + return + allignV < lines_bbox[lines_union[Left]].len(0) && + lines_bbox[lines_union[Left]].pcenter()[0] < lines_bbox[lines_union[Right]].pcenter()[0]; + } + inline bool allign_bottom(const point2d& Left, const point2d& Right) {return allign_bottom(img_influ(Left), img_influ(Right));} inline bool allign_bottom(const Label Left, const Label Right) @@ -832,7 +1181,15 @@ namespace mymln Float AFactor = label_allign_(1, Left, Right); return AFactor < label_size_(1,Left); } - + inline bool paragraph_start_with_tab(const point2d& Point) + { return paragraph_start_with_tab(img_influ(Point));} + inline bool paragraph_start_with_tab(const Label Paragraph) + { + Label FirstLine = paragraphs_first_line[paragraphs_union[Paragraph]]; + return + _bboxgp[FirstLine].pmin()[1] > paragraphs_bbox[paragraphs_union[Paragraph]].pmin()[1] + + (paragraphs_bbox[paragraphs_union[Paragraph]].len(1) / 20); + } void stat() { @@ -844,38 +1201,158 @@ namespace mymln std::cout << " lines(s) : " << CLine << std::endl; } - void debug_save_all(std::string file, image2d<bool> source) + void debug_set_image(image2d<bool>& source) + {debug_source = source;} + inline void debug_create_buffer() + { + mln::initialize(debug_buffer,img_influ); + debug_buffer_enable = true; + } + + inline void debug_save_buffer(std::string file) + { + debug_buffer_enable = false; + io::ppm::save(mln::debug::superpose(debug_buffer, debug_source, literal::white) , file); + } + + inline void debug_draw_line_red_buffer(const point2d& A,const point2d& B ) + { + if(debug_buffer_enable) + draw::line(debug_buffer, A, B, mln::literal::red); + } + inline void debug_draw_line_green_buffer(const point2d& A,const point2d& B ) + { + if(debug_buffer_enable) + draw::line(debug_buffer, A, B, mln::literal::green); + } + + void debug_save_union(std::string file) + {debug_save_union(file, debug_source);} + void debug_save_union(std::string file, image2d<bool> source) { image2d<value::rgb8> ima_color; mln::initialize(ima_color,img_influ); - for(unsigned int N = 0; N < lines_bbox.size(); N++) + for(unsigned int N = 1; N < lines_union.size(); N++) { - if(lines_bbox[N].is_valid()) + if(lines_union[N]) { - draw::box(ima_color, lines_bbox[N], mln::literal::blue); + if(N == lines_union.link(N)) + draw::box(ima_color, _bboxgp[N], mln::literal::blue); + else + draw::line(ima_color, _bboxgp[N].pcenter(), _bboxgp[lines_union.link(N)].pcenter(), mln::literal::blue); } } - for(unsigned int N = 0; N < paragraphs_bbox.size(); N++) + for(unsigned int N = 1; N < paragraphs_union.size(); N++) { - if(paragraphs_bbox[N].is_valid()) + if(paragraphs_union[N]) { - draw::box(ima_color, paragraphs_bbox[N], mln::literal::red); + if(N == paragraphs_union.link(N)) + draw::box(ima_color, _bboxgp[N], mln::literal::red); + else + draw::line(ima_color, _bboxgp[N].pcenter(), _bboxgp[paragraphs_union.link(N)].pcenter(), mln::literal::red); } } - for(unsigned int N = 0; N < lines_first_label.size(); N++) + io::ppm::save(mln::debug::superpose(ima_color, source, literal::white) , file); + } + void debug_save_lines(std::string file) + {debug_save_lines(file, debug_source);} + void debug_save_lines(std::string file, image2d<bool> source) + { + image2d<value::rgb8> ima_color; + mln::initialize(ima_color,img_influ); + + for(unsigned int N = 0; N < lines_bbox.size(); N++) + { + if(lines_bbox[N].is_valid()) + { + draw::box(ima_color, lines_bbox[N], mln::literal::blue); + } + } + for(unsigned int N = 0; N < _bboxgp.size(); N++) + { + if(_bboxgp[N].is_valid() && contain_letter(N)) + { + draw::box(ima_color, _bboxgp[N], mln::literal::cyan); + } + } + io::ppm::save(mln::debug::superpose(ima_color, source, literal::white) , file); + } + + + + + + void debug_save_all(std::string file) + {debug_save_all(file, debug_source);} + void debug_save_all(std::string file, image2d<bool> source) + { + image2d<value::rgb8> ima_color; + mln::initialize(ima_color,img_influ); + + for(unsigned int N = 0; N < _bboxgp.size(); N++) + { + if(_bboxgp[N].is_valid() && contain_letter(N)) + { + draw::box(ima_color, _bboxgp[N], mln::literal::cyan); + } + } + + for(unsigned int N = 0; N < lines_first_label.size(); N++) { if(_bboxgp[lines_first_label[N]].is_valid()) { draw::box(ima_color, _bboxgp[lines_first_label[N]], mln::literal::yellow); } } + + for(unsigned int N = 0; N < lines_last_label.size(); N++) + { + if(_bboxgp[lines_first_label[N]].is_valid()) + { + draw::box(ima_color, _bboxgp[lines_last_label[N]], mln::literal::orange); + } + } + + + for(unsigned int N = 0; N < lines_bbox.size(); N++) + { + if(lines_bbox[N].is_valid()) + { + draw::box(ima_color, lines_bbox[N], mln::literal::blue); + } + } + for(unsigned int N = 0; N < lines_influ_bbox.size(); N++) + { + if(lines_influ_bbox[N].is_valid()) + { + //draw::box(ima_color, lines_influ_bbox[N], mln::literal::cyan); + } + } + for(unsigned int N = 0; N < paragraphs_bbox.size(); N++) + { + if(paragraphs_bbox[N].is_valid()) + { + draw::box(ima_color, paragraphs_bbox[N], mln::literal::red); + if(paragraphs_bbox_influ[N].is_valid()) + { + draw::box(ima_color, paragraphs_bbox_influ[N], mln::literal::orange); + } + } + + } + for(unsigned int N = 0; N < _bboxgp.size(); N++) + { + if(_bboxgp[N].is_valid() && (implicit_separators_left_mask(N) || implicit_separators_right_mask(N))) + { + // draw::box(ima_color, _bboxgp[N], mln::literal::yellow); + } + } + io::ppm::save(mln::debug::superpose(ima_color, source, literal::white) , file); } void debug_save_paragraphs(std::string file) { mymln::debug::save_label_image(img, paragraphs_union , file);} - void debug_save_lines(std::string file) - { mymln::debug::save_label_image(img, lines_union , file);} void debug_save_separators(std::string file) { mymln::debug::save_label_image(img, implicit_separators_union , file);} vertex_image<point2d,bool> fun_mask_separators() @@ -944,10 +1421,29 @@ namespace mymln mln::util::array<box2d> bbox_enlarge_mask_noise(short int x, short int y) { return bbox_mask_enlarge_(noise_mask, x, y); } - Label get_label(point2d point) + Label get_label(const point2d& point) { return img_influ(point); } + + inline box2d get_paragraph_bbox(const point2d& point) + { return get_paragraph_bbox(img_influ(point)); } + + inline box2d get_paragraph_bbox(Label L) + { return paragraphs_bbox[paragraphs_union[L]]; } + + + inline box2d get_line_bbox(const point2d& point) + { return get_line_bbox(img_influ(point)); } + + inline box2d get_line_bbox(Label L) + { return lines_bbox[lines_union[L]]; } + + inline unsigned int get_paragraph_length(const point2d& point) + { return get_paragraph_length(img_influ(point)); } - inline unsigned int get_line_length(point2d point) + inline unsigned int get_paragraph_length(Label L) + { return paragraphs_len[paragraphs_union[L]]; } + + inline unsigned int get_line_length(const point2d& point) { return get_line_length(img_influ(point)); } inline unsigned int get_line_length(Label L) @@ -958,6 +1454,102 @@ namespace mymln inline unsigned int get_line_width(Label L) { return lines_bbox[lines_union[L]].len(1); } + + + + inline Float letter_ratio_XY(const point2d& point) + {return letter_ratio_XY(img_influ(point));} + inline Float letter_ratio_XY(Label Letter) + { + return (Float)_bboxgp[Letter].len(1) / (Float)_bboxgp[Letter].len(0); + } + inline bool line_median(const point2d& point) + { return line_median(img_influ(point)); } + + inline bool line_median(Label Letter) + { + short int D = _bboxgp[Letter].pcenter()[0] - get_line_bbox(Letter).pcenter()[0]; + if(D<0)D=-D; + return D * 3 < get_line_bbox(Letter).len(0); + } + + inline bool line_size_small(const point2d& point) + { return line_size_small(img_influ(point)); } + inline bool line_size_small(Label Letter) + { + return _bboxgp[Letter].len(0) * 3 < get_line_bbox(Letter).len(0); + } + + inline bool line_base(const point2d& point) + { return line_base(img_influ(point)); } + inline bool line_base(Label Letter) + { + short int D = _bboxgp[Letter].pcenter()[0] - get_line_bbox(Letter).pcenter()[0]; + if(D<0)D=-D; + return + D * 2 < get_line_bbox(Letter).len(0) && + get_line_bbox(Letter).pcenter()[0] + (get_line_bbox(Letter).len(0) / 5) < _bboxgp[Letter].pcenter()[0]; + } + + inline bool letter_included(point2d Par1, point2d Par2) + { return letter_included(img_influ(Par1), img_influ(Par2)); } + inline bool letter_included(Label Par1, Label Par2) + { + return + _bboxgp[Par1].has(_bboxgp[Par2].pmin()) && + _bboxgp[Par1].has(_bboxgp[Par2].pmax()) ; + } + + inline bool paragraph_included_influence(point2d Par1, point2d Par2) + { return paragraph_included_influence(img_influ(Par1), img_influ(Par2)); } + inline bool paragraph_included_influence(Label Par1, Label Par2) + { + return + paragraphs_bbox_influ[paragraphs_union[Par1]].has(paragraphs_bbox[paragraphs_union[Par2]].pmin()) && + paragraphs_bbox_influ[paragraphs_union[Par1]].has(paragraphs_bbox[paragraphs_union[Par2]].pmax()) ; + } + + inline bool paragraph_included(point2d Par1, point2d Par2) + { return paragraph_included(img_influ(Par1), img_influ(Par2)); } + inline bool paragraph_included(Label Par1, Label Par2) + { + return + paragraphs_bbox[paragraphs_union[Par1]].has(paragraphs_bbox[paragraphs_union[Par2]].pmin()) && + paragraphs_bbox[paragraphs_union[Par1]].has(paragraphs_bbox[paragraphs_union[Par2]].pmax()) ; + } + + inline bool line_influence_reciprocal(const point2d& L1, const point2d& L2) + {return line_influence_reciprocal(img_influ(L1), img_influ(L2));} + + inline bool line_influence_reciprocal(Label L1, Label L2) + { + return + lines_influ_bbox[lines_union[L1]].has(lines_influ_bbox[lines_union[L2]].pmin()) || + lines_influ_bbox[lines_union[L1]].has(lines_influ_bbox[lines_union[L2]].pmax()) || + lines_influ_bbox[lines_union[L2]].has(lines_influ_bbox[lines_union[L1]].pmin()) || + lines_influ_bbox[lines_union[L2]].has(lines_influ_bbox[lines_union[L1]].pmax()) ; + } + + inline bool allign_size_large_inside( const point2d& Left, const point2d& Right) + {return allign_size_large_inside(img_influ(Left), img_influ(Right));} + + inline bool allign_size_large_inside( const Label Left, const Label Right) + { + short int SizeL0 = label_size_(0, Left); + short int SizeR0 = label_size_(0, Right); + short int SizeL1 = label_size_(1, Left); + short int SizeR1 = label_size_(1, Right); + short int Swap = 0; + if(SizeL0 < SizeL1) + { SizeL0 = SizeL1; } + if(SizeR0 < SizeR1){SizeR0 = SizeR1;} + return SizeR0 > (SizeL0 / 5) && SizeR0 < (SizeL0); + } + inline bool paragraph_has(point2d Par, point2d Point) + { return paragraph_has(img_influ(Par), Point); } + + inline bool paragraph_has(Label Par, point2d Point) + { return paragraph_has[paragraphs_union[Par]].has(Point); } inline bool line_has(point2d Line, point2d Point) { return line_has(img_influ(Line), Point); } @@ -965,6 +1557,13 @@ namespace mymln inline bool line_has(Label Line, point2d Point) { return lines_bbox[lines_union[Line]].has(Point); } + inline bool line_influence_has(point2d Line, point2d Point) + { return line_influence_has(img_influ(Line), Point); } + + inline bool line_influence_has(Label Line, point2d Point) + { return lines_influ_bbox[lines_union[Line]].has(Point); } + + inline unsigned int get_beginning_of_line(point2d point) { return get_beginning_of_line(img_influ(point)); } @@ -991,6 +1590,7 @@ namespace mymln lines_first_label.fill(0); lines_last_label.fill(0); lines_len.fill(0); + start_lines_mask(0) = false; end_lines_mask(0) = false; @@ -1007,6 +1607,7 @@ namespace mymln end_lines_mask = fun::i2v::array<bool>(Areas_Number_); start_end_lines_mask = fun::i2v::array<bool>(Areas_Number_); lines_bbox = mln::util::array<box2d>(NLine + 1); + lines_influ_bbox = mln::util::array<box2d>(NLine + 1); lines_len.fill(0); start_lines_mask(0) = false; end_lines_mask(0) = false; @@ -1076,7 +1677,68 @@ namespace mymln inline bool contain_implicit_separator(const Label lbl) {return implicit_separators_union[lbl] != 0; } + inline void merge(const point2d& A, const point2d& B) + { + merge(img_influ(A), img_influ(B)); + } + inline void merge(const Label A, const Label B) + { + if( A && B && !kill_mask(A) && !kill_mask(B) && A != B) + { + img_influ(_bboxgp[B].pcenter()) = A; + _bboxgp[A].merge(_bboxgp[B]); + _bboxgp[B] = box2d(); + kill_mask(B) = true; + if(letters_mask(A) && letters_mask(B)) + { + if(lines_union.is_self_link(B)) + { + lines_union.add_self_link(A); + lines_union.add_link(A, B); + } + } + else if(alone_letters_mask(A) && letters_mask(B)) + { + alone_letters_mask(A) = false; + letters_mask(A) = true; + all_letters_mask(A) = true; + if(lines_union.is_self_link(B)) + { + lines_union.add_self_link(A); + lines_union.add_link(A, B); + } + } + else if(letters_mask(B)) + { + add_letter_coerce(A); + lines_union.add_link(B, A); + } + + + + implicit_separators_left_mask(B) = false; + implicit_separators_right_mask(B) = false; + noise_mask(B) = false; + alone_letters_mask(B) = false; + all_letters_mask(B) = false; + letters_mask(B) = false; + separators_mask(B) = false; + containers_mask(B) = false; + start_end_lines_mask(B) = false; + Hseparator_mask(B) = false; + Vseparator_mask(B) = false; + if(letters_mask(A) && start_lines_mask(B)){start_lines_mask(A) = true;} + if(letters_mask(A) && end_lines_mask(B)){end_lines_mask(A) = true;} + if(letters_mask(A) && start_end_lines_mask(B)){start_end_lines_mask(A) = true;} + + + start_lines_mask(B) = false; + end_lines_mask(B) = false; + start_end_lines_mask(B) = false; + + } + } inline void add_to_separator_left(const point2d& point) @@ -1106,6 +1768,23 @@ namespace mymln point2d p = _bboxgp[i].pcenter(); return p; } + inline void reset_tag_bool() + {Btag_lbl.fill(false);} + inline void tag_label_bool(const point2d& point, bool tag) + { tag_label_bool(img_influ(point), tag);} + inline void tag_label_bool(Label lbl, bool tag) + {Btag_lbl[lbl] = tag;} + + inline bool get_tag_bool(const point2d& point) + { return get_tag_bool(img_influ(point));} + inline bool get_tag_bool(Label lbl) + {return Btag_lbl[lbl];} + + inline std::string get_tag(const point2d& point) + { return get_tag(img_influ(point));} + inline std::string get_tag(Label lbl) + {return tag_lbl[lbl];} + inline void tag_label(const point2d& point, std::string tag) { tag_label(img_influ(point), tag);} inline void tag_label(Label lbl, std::string tag) @@ -1125,26 +1804,140 @@ namespace mymln inline void lines_iter_valid() { return SeqP < Areas_Number_; } - + inline void recook_paragraphs() + { + paragraphs_len.fill(0); + cook_paragraphs_(); + } inline void cook_paragraphs() { paragraphs_bbox = mln::util::array<box2d>(NPar + 1); + paragraphs_len = mln::util::array<unsigned int>(NPar + 1); + paragraphs_first_line = mln::util::array<unsigned int>(NPar + 1); + paragraphs_bbox_influ = mln::util::array<box2d>(NPar + 1); cook_paragraphs_(); } + inline void compute_letter_middle_space() + { + lines_space = mln::util::array<unsigned int>(NLine + 1); + lines_space.fill(0); + compute_letter_middle_space_(); + } + inline void compute_letter_middle_height() + { + lines_height = mln::util::array<unsigned int>(NLine + 1); + lines_height.fill(0); + compute_letter_middle_height_(); + } + inline void compute_letter_middle_width() + { + lines_width = mln::util::array<unsigned int>(NLine + 1); + lines_width.fill(0); + compute_letter_middle_width_(); + } + inline void recompute_letter_middle_space() + { + lines_space.fill(0); + compute_letter_middle_height_(); + } + inline void recompute_letter_middle_height() + { + lines_height.fill(0); + compute_letter_middle_height_(); + } + inline void recompute_letter_middle_width() + { + lines_width.fill(0); + compute_letter_middle_height_(); + } + + inline unsigned int get_letter_middle_space(const point2d& point) + {return get_letter_middle_space(img_influ(point));} + inline unsigned int get_letter_middle_space(const Label lbl) + {return lines_space[lines_union[lbl]];} + + + inline unsigned int get_letter_middle_height(const point2d& point) + {return get_letter_middle_height(img_influ(point));} + inline unsigned int get_letter_middle_height(const Label lbl) + {return lines_height[lines_union[lbl]];} + + inline unsigned int get_letter_middle_width(const point2d& point) + {return get_letter_middle_width(img_influ(point));} + inline unsigned int get_letter_middle_width(const Label lbl) + {return lines_width[lines_union[lbl]];} + + inline unsigned int get_line_ID(const Label lbl) + { + return lines_union[lbl]; + } + inline unsigned int get_first_line_ID(const Label lbl) + { + return paragraphs_first_line[paragraphs_union[lbl]]; + } + inline unsigned int get_first_line() + { + return first_line; + } + inline unsigned int get_first_letter(const unsigned int line_ID) + { + return lines_first_label[line_ID]; + } + inline void get_next_line(int& line_ID) + { + if(lines_seq_pos[line_ID] == line_ID){ line_ID = 0; } + line_ID = lines_seq_pos[line_ID]; + } + inline void get_next_line(unsigned int& line_ID) + { + if(lines_seq_pos[line_ID] == line_ID){ line_ID = 0; } + line_ID = lines_seq_pos[line_ID]; + } + inline void get_next_letter(Label& lbl) + { + if(lines_seq[lbl] == lbl){ lbl = 0; } + lbl = lines_seq[lbl]; + } + inline void get_next_letter(int& lbl) + { + if(lines_seq[lbl] == lbl){ lbl = 0; } + lbl = lines_seq[lbl]; + } + inline void get_next_letter(unsigned int& lbl) + { + if(lines_seq[lbl] == lbl){ lbl = 0; } + lbl = lines_seq[lbl]; + } + inline std::string get_line_string(const unsigned int ID) + { + std::string line = ""; + unsigned int Last = 0; + for(int N = get_first_letter(ID); N != 0; get_next_letter(N)) + { + if(Last) + if(space(Last,N) > get_letter_middle_space(N) * 2) + line += " "; + + if(!get_tag(N).compare("")){line += "?";} + else{line += get_tag(N);} + Last = N; + } + return line; + } private: fun::i2v::array<bool> implicit_separators_left_mask; fun::i2v::array<bool> implicit_separators_right_mask; mln::util::array<unsigned int> separators_len_right; mln::util::array<unsigned int> separators_len_left; mln::util::array<unsigned int> separators_middle; - + mln::util::array<unsigned int> separators_marging; inline void cook_separators_() { implicit_separators_left_mask(0) = false; - for(unsigned int N = 1; N < implicit_separators_union.size(); N++) + for(int N = 1; N < implicit_separators_union.size(); N++) { if(implicit_separators_union[N] != 0) { @@ -1160,11 +1953,8 @@ namespace mymln /* processor */ for(unsigned int N = 1; N < NImpSep + 1; N++) { - if(separators_len_left[N] != 0) - { if(separators_len_left[N] != 0) separators_middle[N] /= separators_len_left[N]; - } } @@ -1177,27 +1967,27 @@ namespace mymln implicit_separators_left_mask(N) = false; } else if ( - _bboxgp[N].pmin()[1] < separators_middle[implicit_separators_union[N]] - 10 || - _bboxgp[N].pmin()[1] > separators_middle[implicit_separators_union[N]] + 10 + _bboxgp[N].pmin()[1] < separators_middle[implicit_separators_union[N]] - _bboxgp[N].len(1) * 2 || + _bboxgp[N].pmin()[1] > separators_middle[implicit_separators_union[N]] + _bboxgp[N].len(1) * 2 ) { - + /* separators_len_left[implicit_separators_union[N]]--; implicit_separators_union[N] = 0; - implicit_separators_left_mask(N) = false; + implicit_separators_left_mask(N) = false;*/ } } for(unsigned int N = 1; N < Areas_Number_; N++) { if(!start_lines_mask(N) || implicit_separators_union[N] == 0) { - if( separators_len_left[implicit_separators_union[N]] > 0) + if( separators_len_left[implicit_separators_union[N]] > 0) separators_len_left[implicit_separators_union[N]]--; } } for(unsigned int N = 1; N < Areas_Number_; N++) { - if(separators_len_left[implicit_separators_union[N]] < 2) + if(separators_len_left[implicit_separators_union[N]] < 1) { separators_len_left[implicit_separators_union[N]] = 0; implicit_separators_union[N] = 0; @@ -1225,11 +2015,8 @@ namespace mymln /* processor */ for(unsigned int N = 1; N < NImpSep + 1; N++) { - if(separators_len_right[N] != 0) - { if(separators_len_right[N] != 0) separators_middle[N] /= separators_len_right[N]; - } } @@ -1247,9 +2034,9 @@ namespace mymln ) { - separators_len_right[implicit_separators_union[N]]--; + /*separators_len_right[implicit_separators_union[N]]--; implicit_separators_union[N] = 0; - implicit_separators_right_mask(N) = false; + implicit_separators_right_mask(N) = false;*/ } } for(unsigned int N = 1; N < Areas_Number_; N++) @@ -1262,7 +2049,7 @@ namespace mymln } for(unsigned int N = 1; N < Areas_Number_; N++) { - if(separators_len_right[implicit_separators_union[N]] < 2) + if(separators_len_right[implicit_separators_union[N]] < 1) { separators_len_right[implicit_separators_union[N]] = 0; implicit_separators_union[N] = 0; @@ -1274,57 +2061,150 @@ namespace mymln // PRIVATE DATA ON LINES mln::util::array<unsigned int> lines_len; + mln::util::array<unsigned int> lines_height; + mln::util::array<unsigned int> lines_width; + mln::util::array<unsigned int> lines_space; mln::util::array<unsigned int> lines_first_label; mln::util::array<unsigned int> lines_last_label; mln::util::array<unsigned int> lines_seq; mln::util::array<unsigned int> lines_seq_pos; mln::util::array<box2d> lines_bbox; + mln::util::array<box2d> lines_influ_bbox; mln::util::array<Label> lines_split; fun::i2v::array<bool> start_lines_mask; fun::i2v::array<bool> end_lines_mask; fun::i2v::array<bool> start_end_lines_mask; + unsigned int first_line; unsigned int SeqP; + inline void compute_letter_middle_width_() + { + for(unsigned int N = 1; N < Areas_Number_; N++) + { + if(lines_union[N]) + { + lines_width[lines_union[N]] += _bboxgp[N].len(1); + } + } + for(unsigned int N = 1; N < lines_height.size(); N++) + { + if(lines_len[N]) + lines_width[N] /= lines_len[N]; + } + } + + inline void compute_letter_middle_height_() + { + + for(unsigned int N = 1; N < Areas_Number_; N++) + { + if(lines_union[N]) + { + lines_height[lines_union[N]] += _bboxgp[N].len(0); + } + } + for(unsigned int N = 1; N < lines_height.size(); N++) + { + if(lines_len[N]) + lines_height[N] /= lines_len[N]; + } + } + + inline void compute_letter_middle_space_() + { + + for(unsigned int N = 1; N < Areas_Number_; N++) + { + if(lines_union[N]) + { + lines_space[lines_union[N]] += _bboxgp[N].len(1); + } + } + for(unsigned int N = 1; N < lines_space.size(); N++) + { + if(lines_len[N] - 1 > 0) + { + + if(lines_space[N] > lines_bbox[N].len(1)) + lines_space[N] = 0; + else + { + lines_space[N] = (lines_bbox[N].len(1) - lines_space[N]) / (lines_len[N] - 1); + } + } + else + { + lines_space[N] = 0; + } + - + } + } inline void cook_lines_iter_() { + first_line = 0; lines_seq = mln::util::array<unsigned int>(Areas_Number_); lines_seq_pos = mln::util::array<unsigned int>(NLine + 1); lines_seq.fill(0); lines_seq_pos.fill(0); - for(unsigned int N = 0; N < NLine + 1; N++) - { - lines_seq[SeqP] = lines_first_label[N]; - lines_seq_pos[N] = SeqP; - SeqP += lines_len[N]; - } - for(unsigned int N = 1; N < Areas_Number_; N++) + + typedef vertex_image<point2d,bool> v_ima_g; + typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; + v_ima_g mask = fun_mask_letters(); + mln_piter_(v_ima_g) v(mask.domain()); + typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t; + nbh_t nbh(mask); + mln_niter_(nbh_t) q(nbh, v); + for_all(v) { - if(contain_line(N) && !start_lines_mask(N)) + if(contain_letter(v)) + for_all(q) { - SeqP = lines_seq_pos[get_beginning_of_line(N)]; - SeqP++; - - while( lines_seq[SeqP] && _bboxgp[lines_seq[SeqP]].pmin()[1] < _bboxgp[N].pmin()[1] ) - SeqP++; - if(!lines_seq[SeqP]) - {lines_seq[SeqP] = N;} - else - { - unsigned int Swap1, Swap2; - Swap1 = lines_seq[SeqP]; - lines_seq[SeqP] = N; - while(lines_seq[SeqP]) + if(contain_letter(q)) + if(same_line(q, v)) { - Swap2 = lines_seq[SeqP]; - lines_seq[SeqP] = Swap1; - Swap1 = Swap2; + if(_bboxgp[img_influ(q)].pmax()[1] < _bboxgp[img_influ(v)].pmin()[1]) + { + if(lines_seq[img_influ(q)]) + { + if(_bboxgp[lines_seq[img_influ(q)]].pmin()[1] > _bboxgp[img_influ(v)].pmin()[1]) + lines_seq[img_influ(q)] = img_influ(v); + } + else + lines_seq[img_influ(q)] = img_influ(v); + } + } + else + { + if(get_line_bbox(q).pmax()[0] < get_line_bbox(v).pmin()[0]) + { + if(lines_seq_pos[lines_union[img_influ(q)]]) + { + if(lines_bbox[lines_seq_pos[lines_union[img_influ(q)]]].pmin()[0] > get_line_bbox(v).pmin()[0]) + lines_seq_pos[lines_union[img_influ(q)]] =lines_union[img_influ(v)]; + } + else + lines_seq_pos[lines_union[img_influ(q)]] = lines_union[img_influ(v)]; + + } } - lines_seq[SeqP] = Swap1; - } } } + std::cout << "end graph cooking"; + unsigned int Last = 0; + int count = 0; + for(unsigned int N = 1; N < lines_seq_pos.size() && N < lines_len.size(); N++) + { + if(lines_len[N] && !first_line) + {first_line = N;} + if(lines_len[N] && Last) + {lines_seq_pos[Last] = N;} + if(lines_len[N]) + {Last = N; std::cout << lines_len[N] << endl; count++;} + + } + std::cout << count << endl; + std::cout << "linear"; } inline void cook_lines_() @@ -1332,7 +2212,7 @@ namespace mymln Cooked_CLine = CLine; for(unsigned int N = 1; N < lines_union.size(); N++) { - if(lines_union[N] != 0) + if(lines_union[N] != 0 && !kill_mask(N)) { /* APPROXIMATE THE NUMBER OF CHAR IN THE LINE */ lines_len[lines_union[N]]++; @@ -1360,6 +2240,7 @@ namespace mymln if( lines_first_label[N] != 0) { lines_bbox[N] = box2d(); + start_lines_mask(lines_first_label[N]) = true; end_lines_mask(lines_last_label[N]) = true; start_end_lines_mask(lines_first_label[N]) = true; @@ -1381,11 +2262,25 @@ namespace mymln lines_bbox[lines_union[N]].merge(_bboxgp[N]); } if(lines_len[lines_union[N]] == 1) - { letters_mask(N) = false; alone_letters_mask(N) = true; } + { + letters_mask(N) = false; + alone_letters_mask(N) = true; + all_letters_mask(N) = true; + end_lines_mask(N) = true; + start_lines_mask(N)= true; + start_end_lines_mask(N) = true; + } else if(lines_union[N]) - { letters_mask(N) = true; alone_letters_mask(N) = false; } + { + letters_mask(N) = true; + alone_letters_mask(N) = false; + all_letters_mask(N) = true; + } + } + for(unsigned int N = 1; N < lines_bbox.size(); N++) + { + lines_influ_bbox[N] = lines_bbox[N].to_larger(lines_bbox[N].len(0) / 3); } - } @@ -1430,7 +2325,13 @@ namespace mymln { Data SX = label_size_(0, label); Data SY = label_size_(1, label); - return SX >= Min && SY >= Min; + return SX >= Min && SY >= Min ; + } + inline bool label_valid_size_Min_Large_(Label label, Data Min) + { + Data SX = label_size_(0, label); + Data SY = label_size_(1, label); + return SX >= Min && SY >= Min || SX >= Min * 2 || SY >= Min * 2; } inline bool label_valid_ratio_(Label label, Float Min, Float Max) { @@ -1500,8 +2401,10 @@ namespace mymln fun::i2v::array<bool> all_letters_mask; fun::i2v::array<bool> containers_mask; fun::i2v::array<bool> noise_mask; + fun::i2v::array<bool> kill_mask; mln::util::array<std::string> tag_lbl; + mln::util::array<bool> Btag_lbl; unsigned int Cooked_CLine; unsigned int CLine; @@ -1521,36 +2424,90 @@ namespace mymln mln::util::array<unsigned int> paragraphs_first_label; mln::util::array<unsigned int> paragraphs_last_label; mln::util::array<unsigned int> paragraphs_assoc; + mln::util::array<unsigned int> paragraphs_len; + /* NOTE THESE ARRAYS MUST BE INITIALIZEDD WITH THE NUMBER OF PARAGRAPH */ + + mln::util::array<box2d> paragraphs_bbox; - + mln::util::array<box2d> paragraphs_bbox_influ; + mln::util::array<unsigned int> paragraphs_first_line; + inline void first_recognition() + { + + } + + inline void cook_paragraphs_() { - mln::util::array<unsigned int> paragraphs_assoc(lines_union.size()); - for(int N = 0; N < paragraphs_union.size(); N++) + /* mln::util::array<unsigned int> paragraphs_assoc(lines_union.size()); + + for(int N = 1; N < paragraphs_union.size(); N++) { - if(paragraphs_union[N]) + if(paragraphs_union[N] && lines_union[N] && !start_lines_mask) { if(paragraphs_assoc[lines_union[N]]) - { paragraphs_union.add_link(N, paragraphs_assoc[lines_union[N]]); } + { paragraphs_union.add_link(paragraphs_assoc[lines_union[N]], N); } else - {paragraphs_assoc[lines_union[N]] = N;} + {paragraphs_assoc[lines_union[N]] = get_beginning_of_line(N);} } } - paragraphs_union.propage_links(); + paragraphs_union.propage_links();*/ for(int N = 0; N < paragraphs_bbox.size(); N++) { paragraphs_bbox[N] = box2d(); } + + for(int N = 0; N < lines_len.size(); N++) + { + if(lines_len[N] && paragraphs_union[lines_first_label[N]]) + { + paragraphs_len[paragraphs_union[lines_first_label[N]]]++; + if(paragraphs_first_line[paragraphs_union[lines_first_label[N]]]) + { + if( + lines_bbox[paragraphs_first_line[paragraphs_union[lines_first_label[N]]]].pmin()[0] > + lines_bbox[N].pmin()[0] + ) + { + paragraphs_first_line[paragraphs_union[lines_first_label[N]]] = N; + } + } + else + paragraphs_first_line[paragraphs_union[lines_first_label[N]]] = N; + } + } + for(int N = 0; N < paragraphs_union.size(); N++) { - if(paragraphs_union[N]) + if(paragraphs_union[N] && paragraphs_len[paragraphs_union[N]]) + { paragraphs_bbox[paragraphs_union[N]].merge(lines_bbox[lines_union[N]]); + } + else + { + paragraphs_union[N] = 0; + } } + + + for(int N = 0; N < paragraphs_len.size(); N++) + { + if(paragraphs_len[N]) + { + paragraphs_bbox_influ[N] = paragraphs_bbox[N].to_larger(lines_bbox[paragraphs_first_line[N]].len(0) / 10); + } + } } - + template<typename T> void debug_assert_array_(mln::util::array<T>& array, int N, const std::string& name) + { + if(N >= array.size()) + { + std::cout << "WARNING : " << name << " " << N << " " << "is invalid" << endl; + } + } @@ -1574,6 +2531,9 @@ namespace mymln g_vertices_p _area_graph; mln::image2d<Label> img; mln::image2d<Label> img_influ; + mln::image2d<bool> debug_source; + mln::image2d<value::rgb8> debug_buffer; + bool debug_buffer_enable; Label Areas_Number_; /* IMPLICIT SEPARATOR DETECTION */ diff --git a/scribo/sandbox/raphael/code/my/document/letters.hh b/scribo/sandbox/raphael/code/my/document/letters.hh index 6701943..f0249ae 100644 --- a/scribo/sandbox/raphael/code/my/document/letters.hh +++ b/scribo/sandbox/raphael/code/my/document/letters.hh @@ -9,9 +9,17 @@ namespace mymln { namespace document { - void clean_letter_aberation() + template<typename L, typename F, typename D> + void clean_letters_aberations_big(document<L,F,D> doc, mln::util::array<box2> bouningbox_letters, mln::util::array<box2> middle_box_lines, mymln::util::union_find<L> letters_union, ) { - + for(int N = 0; N < letters_union.size(); N++) + { + if(letters_union[N]) + { + doc.get_letter_middle_height(N) * 3 < doc.get_bbox(N).len(0); + doc.add_noise(N); + } + } } } } \ No newline at end of file diff --git a/scribo/sandbox/raphael/code/my/document/recognition.hh b/scribo/sandbox/raphael/code/my/document/recognition.hh new file mode 100644 index 0000000..9c10cd9 --- /dev/null +++ b/scribo/sandbox/raphael/code/my/document/recognition.hh @@ -0,0 +1,74 @@ +#ifndef INC_RECOGNITION_DOC +#define INC_RECOGNITION_DOC +#include<my/document/document.hh> +#include <mln/core/image/graph_elt_neighborhood.hh> +#include <mln/core/image/vertex_image.hh> +using namespace mln; + +namespace mymln +{ + namespace document + { + template<typename L, typename F, typename D> + void recognize_minus(mymln::document::document<L,F,D>& doc) + { + typedef vertex_image<point2d,bool> v_ima_g; + typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; + v_ima_g mask = doc.fun_mask_letters(); + mln_piter_(v_ima_g) v(mask.domain()); + typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t; + nbh_t nbh(mask); + mln_niter_(nbh_t) q(nbh, v); + for_all(v) + { + if(doc.contain_line(v)) + { + for_all(q) + { + if(doc.contain_line(q) && doc.line_median(q) && doc.letter_ratio_XY(q) >= 3.0f) + { + doc.tag_label(q, "-"); + } + } + } + } + doc.propage_paragraph_link(); + + } + template<typename L, typename F, typename D> + void recognize_dot(mymln::document::document<L,F,D>& doc) + { + typedef vertex_image<point2d,bool> v_ima_g; + typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; + v_ima_g mask = doc.fun_mask_letters(); + mln_piter_(v_ima_g) v(mask.domain()); + typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t; + nbh_t nbh(mask); + mln_niter_(nbh_t) q(nbh, v); + for_all(v) + { + if(doc.contain_line(v)) + { + for_all(q) + { + if( doc.contain_line(q) && doc.same_line(q,v) && doc.line_base(q) && doc.line_size_small(q)) + { + if(doc.letter_ratio_XY(q) > 0.7f && doc.letter_ratio_XY(q) < 1.3f) + doc.tag_label(q, "."); + else if(doc.letter_ratio_XY(q) <= 0.7f) + doc.tag_label(q, ","); + else + doc.tag_label(q, "_"); + + } + } + } + } + doc.propage_paragraph_link(); + + } + } +} + + +#endif \ No newline at end of file diff --git a/scribo/sandbox/raphael/code/my/document/separator.hh b/scribo/sandbox/raphael/code/my/document/separator.hh index 660bbed..2cd98ea 100644 --- a/scribo/sandbox/raphael/code/my/document/separator.hh +++ b/scribo/sandbox/raphael/code/my/document/separator.hh @@ -133,20 +133,72 @@ namespace mymln if(doc.contain_implicit_separator(v)) { bool All_Alone = true; - doc.jump_to_line(v); - if((!doc.contain_line(v))) + + + for_all(q) { - doc.add_to_line(v); - doc.add_to_line_self_link(v); + + if(doc.contain_implicit_separator(q) && doc.same_implicit_separator(q,v) ) + { + // draw::line(out, q,v, mln::literal::blue); + if(doc.allign_V(q,v) && doc.allign_size(q, v) && doc.allign_right(v,q)) + { + count[doc[q]]++; + } + + } + else if (doc.contain_implicit_separator(q)) + { + if(doc.allign_V(q,v) && doc.allign_size(q, v) && doc.allign_right(v,q) && doc.allign_proximity_strict(v, q)) + { + count[doc[q]]++; + } + } + } + } + } + for(unsigned int N = 0; N < doc.size();N++) + { + if(count[N] > 0) + doc.invalidate_implicit_separator(N); + } + } + + template<typename L, typename F, typename D> + void separators_make_clean_right(mymln::document::document<L,F,D>& doc) + { + + typedef vertex_image<point2d,bool> v_ima_g; + typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; + v_ima_g mask = doc.fun_mask_letters(); + mln_piter_(v_ima_g) v(mask.domain()); + typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t; + nbh_t nbh(mask); + mln_niter_(nbh_t) q(nbh, v); + mln::util::array<unsigned> count = mln::util::array<unsigned>(doc.size()); + count.fill(0); + for_all(v) + { + if(doc.contain_implicit_separator(v)) + { + bool All_Alone = true; for_all(q) { - if(doc.contain_implicit_separator(q) && doc.same_implicit_separator(q,v)) + if(doc.contain_implicit_separator(q) && doc.same_implicit_separator(q,v) ) { // draw::line(out, q,v, mln::literal::blue); - if(doc.allign_V(q,v) && doc.allign_size(q, v)) + if(doc.allign_V(q,v) && doc.allign_size(q, v) && doc.allign_right(q,v)) + { + count[doc[q]]++; + } + + } + else if (doc.contain_implicit_separator(q)) + { + if(doc.allign_V(q,v) && doc.allign_size(q, v) && doc.allign_right(q,v) && doc.allign_proximity_strict(v, q)) { count[doc[q]]++; } diff --git a/scribo/sandbox/raphael/code/my/runtime/lib.hh b/scribo/sandbox/raphael/code/my/runtime/lib.hh new file mode 100644 index 0000000..2a36ef3 --- /dev/null +++ b/scribo/sandbox/raphael/code/my/runtime/lib.hh @@ -0,0 +1,180 @@ +#ifndef INC_RUNTIME_LIB +#define INC_RUNTIME_LIB + +using namespace mln; +using namespace std; +namespace mymln +{ + namespace runtime + { + template<typename L, typename F, typename D> + void load_separators(runtime<L,F,D>& run) + { + + run.add_function("separators.find_allign_right", &(mymln::document::separators::separators_find_allign_right)); + run.add_function("separators.make_clean_right", &(mymln::document::separators::separators_make_clean_right)); + run.add_function("separators.find_allign_left", &(mymln::document::separators::separators_find_allign)); + run.add_function("separators.make_clean_left", &(mymln::document::separators::separators_find_allign)); + } + + template<typename L, typename F, typename D> + void load_clean(runtime<L,F,D>& run) + { + run.add_function("clean.containers_items", &(mymln::document::clean_containers_items)); + run.add_function("clean.letters_items", &(mymln::document::clean_letters_items)); + run.add_function("clean.get_lines", &(mymln::document::clean_get_lines)); + + run.add_function("clean.letters_alone", &(mymln::document::clean_letters_alone)); + run.add_function("clean.included_letters", &(mymln::document::clean_included_letters)); + run.add_function("clean.dot_items", &(mymln::document::clean_dot_items)); + run.add_function("clean.quote_items", &(mymln::document::clean_quote_items)); + run.add_function("clean.between", &(mymln::document::clean_between)); + + run.add_function("clean.line_link_item", &(mymln::document::clean_line_link_item)); + run.add_function("clean.proximity_lines", &(mymln::document::clean_proximity_lines)); + run.add_function("clean.quote_lines", &(mymln::document::clean_quote_lines)); + run.add_function("clean.alone_letters_lines", &(mymln::document::clean_alone_letters_lines)); + run.add_function("clean.odd_letters", &(mymln::document::clean_odd_letters)); + + + run.add_function("clean.remove_alone_letter", &(mymln::document::remove_alone_letter)); + run.add_function("clean.paragraph_items", &(mymln::document::clean_paragraph_items)); + run.add_function("clean.paragraphs_up", &(mymln::document::clean_paragraphs_up)); + run.add_function("clean.paragraphs_large", &(mymln::document::clean_paragraphs_large)); + run.add_function("clean.included_paragraphs", &(mymln::document::clean_included_paragraphs)); + run.add_function("clean.backward_letters", &(mymln::document::clean_backward_letters)); + run.add_function("clean.paragraphs_tab", &(mymln::document::clean_paragraphs_tab)); + run.add_function("clean.proximity_letters", &(mymln::document::clean_proximity_letters)); + + } + + template<typename L, typename F, typename D> + void lib_debug_save_all(mymln::document::document<L,F,D>& doc, std::string file) + { doc.debug_save_all(file); } + template<typename L, typename F, typename D> + void lib_debug_save_buffer(mymln::document::document<L,F,D>& doc, std::string file) + { doc.debug_save_buffer(file); } + template<typename L, typename F, typename D> + void lib_debug_create_buffer(mymln::document::document<L,F,D>& doc) + { doc.debug_create_buffer(); } + + template<typename L, typename F, typename D> + void load_debug(runtime<L,F,D>& run) + { + run.add_function_string("debug.save", &(lib_debug_save_all)); + run.add_function("debug.create_buffer", &(lib_debug_create_buffer)); + run.add_function_string("debug.save_buffer", &(lib_debug_save_buffer)); + } + + + template<typename L, typename F, typename D> + void lib_cook_lines(mymln::document::document<L,F,D>& doc) + { doc.cook_lines(); } + template<typename L, typename F, typename D> + void lib_recook_lines(mymln::document::document<L,F,D>& doc) + { doc.recook_lines(); } + template<typename L, typename F, typename D> + void lib_cook_separators_left(mymln::document::document<L,F,D>& doc) + { doc.cook_separators(); } + template<typename L, typename F, typename D> + void lib_cook_separators_right(mymln::document::document<L,F,D>& doc) + { doc.cook_separators_right(); } + template<typename L, typename F, typename D> + void lib_cook_line_splitting(mymln::document::document<L,F,D>& doc) + { doc.cook_line_splitting(); } + template<typename L, typename F, typename D> + void lib_reset_implicit_separators(mymln::document::document<L,F,D>& doc) + { doc.reset_implicit_separators(); } + + template<typename L, typename F, typename D> + void lib_cook_line_splitting_exclusive(mymln::document::document<L,F,D>& doc) + { doc.cook_line_splitting_exclusive(); } + + template<typename L, typename F, typename D> + void lib_cook_paragraphs(mymln::document::document<L,F,D>& doc) + { doc.cook_paragraphs(); } + + template<typename L, typename F, typename D> + void lib_recook_paragraphs(mymln::document::document<L,F,D>& doc) + { doc.recook_paragraphs(); } + + template<typename L, typename F, typename D> + void load_cooking(runtime<L,F,D>& run) + { + run.add_function("cook.lines", &(lib_cook_lines)); + run.add_function("cook.separators_right", &(lib_cook_separators_right)); + run.add_function("cook.separators_left", &(lib_cook_separators_left)); + run.add_function("recook.lines", &(lib_recook_lines)); + run.add_function("cook.line_splitting", &(lib_cook_line_splitting)); + run.add_function("cook.line_splitting_inclusive", &(lib_cook_line_splitting)); + run.add_function("cook.line_splitting_exclusive", &(lib_cook_line_splitting_exclusive)); + run.add_function("cook.reset_implicit_separators", &(lib_reset_implicit_separators)); + run.add_function("cook.paragraphs", &(lib_cook_paragraphs)); + run.add_function("recook.paragraphs", &(lib_recook_paragraphs)); + + } + + + template<typename L, typename F, typename D> + void lib_compute_letter_middle_height(mymln::document::document<L,F,D>& doc) + { doc.compute_letter_middle_height(); } + template<typename L, typename F, typename D> + void lib_compute_letter_middle_width(mymln::document::document<L,F,D>& doc) + { doc.compute_letter_middle_width(); } + template<typename L, typename F, typename D> + void load_compute(runtime<L,F,D>& run) + { + run.add_function("compute.letter_middle_height", &(lib_compute_letter_middle_height)); + run.add_function("compute.letter_middle_width", &(lib_compute_letter_middle_width)); + } + + + template<typename L, typename F, typename D> + void lib_string_print(mymln::document::document<L,F,D>& doc, std::string str) + { std::cout << str; } + template<typename L, typename F, typename D> + void lib_string_print_line(mymln::document::document<L,F,D>& doc, std::string str) + { std::cout << str << std::endl; } + template<typename L, typename F, typename D> + void lib_string_concat(runtime<L,F,D>& run, std::string A, std::string B) + { run.add_variable(A, B); } + + template<typename L, typename F, typename D> + void load_string(runtime<L,F,D>& run) + { + run.add_function_string("string.print", &(lib_string_print)); + run.add_function_string("string.print_line", &(lib_string_print_line)); + run.add_function_string_string("string.concat", &(lib_string_concat)); + run.add_function_string_string("string.clone", &(lib_string_concat)); + } + + + template<typename L, typename F, typename D> + void lib_system_set(runtime<L,F,D>& run, std::string A, std::string B) + { run.add_variable(A, B); } + template<typename L, typename F, typename D> + void lib_system_test_equal(runtime<L,F,D>& run, std::string A, std::string B) + { if(!A.compare("true")){run.call_function(B);} } + + template<typename L, typename F, typename D> + void lib_system_test_nequal(runtime<L,F,D>& run, std::string A, std::string B) + { if(!A.compare("false")){run.call_function(B);} } + + template<typename L, typename F, typename D> + void lib_system_not(runtime<L,F,D>& run, std::string A, std::string B) + { + if(!A.compare("false")){run.add_variable(A, "true");} + else{run.add_variable(A, "false");} + } + + template<typename L, typename F, typename D> + void load_system(runtime<L,F,D>& run) + { + run.add_function_string_string("system.set", &(lib_system_set)); + run.add_function_string_string("system.equal", &(lib_string_concat)); + run.add_function_string_string("system.nequal", &(lib_string_concat)); + } + + } +} +#endif \ No newline at end of file diff --git a/scribo/sandbox/raphael/code/my/runtime/runtime.hh b/scribo/sandbox/raphael/code/my/runtime/runtime.hh new file mode 100644 index 0000000..f4057bc --- /dev/null +++ b/scribo/sandbox/raphael/code/my/runtime/runtime.hh @@ -0,0 +1,196 @@ +#ifndef INC_RUNTIME +#define INC_RUNTIME + +using namespace mln; +using namespace std; +namespace mymln +{ + namespace runtime + { + template<typename Label, typename Float, typename Data> + + class runtime + { + typedef document::document<Label, Float, Data> doc; + typedef void (*fun_doc_ptr)(doc); + public: + runtime() + { + program_argument = mln::util::array<string>(0); + program_argument2 = mln::util::array<string>(0); + program_instruction = mln::util::array<string>(0); + doc_fun = map<string, void(*)(doc&) >(); + doc_arg_fun = map<string, void(*)(doc&, string) >(); + doc_arg2_fun = map<string, void(*)(runtime<Label,Float, Data>&, string, string) >(); + doc_local_fun = map<string, int >(); + call_stack = stack<int>(); + CP = 0; + } + void load(const char* file) + { + + fstream filestream(file, fstream::in | fstream::out); + std::string Buffer = ""; + bool flag = !getline(filestream, Buffer).eof(); + int L = 0; + bool remain = flag; + while(remain) + { + if(!flag){remain = false;} + int N = 0; + std::string Instr = ""; + std::string Arg = ""; + std::string Arg2 = ""; + while( N < Buffer.length() && (Buffer[N] == ' ' || Buffer[N] == '\t') && Buffer[N] != ';'){N++;} // trim + while( N < Buffer.length() && (Buffer[N] == ' ' || Buffer[N] == '\t') && Buffer[N] != ';'){N++;} // trim + while(N < Buffer.length() && Buffer[N] != ' ' && Buffer[N] != '\t' && Buffer[N] != ';'){Instr += Buffer[N]; N++;} + while(N < Buffer.length() && (Buffer[N] == ' ' || Buffer[N] == '\t') && Buffer[N] != ';'){N++;} // trim + while(N < Buffer.length() && Buffer[N] != ' ' && Buffer[N] != '\t' && Buffer[N] != ';'){Arg += Buffer[N]; N++;} + while(N < Buffer.length() && (Buffer[N] == ' ' || Buffer[N] == '\t') && Buffer[N] != ';'){N++;} // trim + while(N < Buffer.length() && Buffer[N] != ' ' && Buffer[N] != '\t' && Buffer[N] != ';'){Arg2 += Buffer[N]; N++;} + if(!Instr.compare("fun")) + { + doc_local_fun[Arg] = L; + program_instruction.append(""); + program_argument.append(""); + program_argument2.append(""); + } + else if(Instr.length() > 0 && Instr[0] == '$') + { + program_instruction.append("system.set"); + program_argument.append(Instr); + program_argument2.append(Arg); + } + else + { + program_instruction.append(Instr); + program_argument.append(Arg); + program_argument2.append(Arg2); + } + if(flag) + flag = !getline(filestream, Buffer).eof(); + L++; + } + + filestream.close(); + + } + runtime(const char* file) + { + CP = 0; + program_argument2 = mln::util::array<string>(0); + program_argument = mln::util::array<string>(0); + program_instruction = mln::util::array<string>(0); + doc_local_fun = map<string, void(*)(doc&, string) >(); + load(file); + doc_fun = map<string, void(*)(doc&) >(); + doc_arg_fun = map<string, void(*)(doc&, string) >(); + doc_arg2_fun = map<string, void(*)(runtime<Label,Float, Data>&, string, string) >(); + doc_local_fun = map<string, int >(); + call_stack = stack<int>(); + } + + void run() + { + for(CP = 0; CP < program_instruction.size(); CP++) + { + if(!program_instruction[CP].compare("end")) + ret(); + else if(program_argument2[CP].compare("")) + call_function(program_instruction[CP], get_variable(program_argument[CP]), get_variable(program_argument2[CP])); + else if(program_argument[CP].compare("")) + call_function(program_instruction[CP], get_variable(program_argument[CP])); + else if(program_instruction[CP].compare("")) + call_function(program_instruction[CP]); + } + } + inline void add_function(string name, void(*ptr)(doc&) ) + { + doc_fun[name] = ptr; + } + inline void add_function_string(string name, void(*ptr)(doc&, string arg) ) + { + doc_arg_fun[name] = ptr; + } + inline void add_function_string_string(string name, void(*ptr)(runtime<Label,Float, Data>&, string arg, string arg2) ) + { + doc_arg2_fun[name] = ptr; + } + void add_variable(string name, string value) + { + vars["$" + name] = value; + } + string get_variable(string name) + { + + if(name.length() > 0 && name[0] == '$') + { + if(vars.find(name) == vars.end()) + { + std::cout << "#SCRIPT ERROR : The variable " << name << " doesn't exist" << std::endl; + return ""; + } + return vars[name]; + } + else + return name; + } + void ret() + { + if(call_stack.empty()){ CP = program_instruction.size(); } + else{ CP = call_stack.top(); call_stack.pop(); } + } + void call_function(string name) + { + if(doc_local_fun.find(name) != doc_local_fun.end()) + { + call_stack.push(CP); + CP = doc_local_fun[name]; + return; + } + + if(doc_fun.find(name) == doc_fun.end()) + { + std::cout << "#SCRIPT ERROR : The function " << name << " doesn't exist" << std::endl; + return; + } + doc_fun[name](*current); + } + void call_function(string name, string arg) + { + if(doc_arg_fun.find(name) == doc_arg_fun.end()) + { + std::cout << "#SCRIPT ERROR : The function " << name << " doesn't exist" << std::endl; + return; + } + doc_arg_fun[name](*current, arg); + } + + void call_function(string name, string arg, string arg2) + { + if(doc_arg2_fun.find(name) == doc_arg2_fun.end()) + { + std::cout << "#SCRIPT ERROR : The function " << name << " doesn't exist" << std::endl; + return; + } + doc_arg2_fun[name](*this, arg, arg2); + } + void set_current_document(doc* document) + {current = document;} + private: + int CP; + map<string, string > vars; + map<string, void(*)(doc&) > doc_fun; + map<string, void(*)(doc&, string) > doc_arg_fun; + map<string, void(*)(runtime<Label,Float, Data>&, string, string) > doc_arg2_fun; + map<string, int > doc_local_fun; + mln::util::array<std::string> program_instruction; + mln::util::array<std::string> program_argument; + mln::util::array<std::string> program_argument2; + + stack<int> call_stack; + doc* current; + }; + } +} +#endif \ No newline at end of file diff --git a/scribo/sandbox/raphael/code/test.cc b/scribo/sandbox/raphael/code/test.cc index feaf817..1f8d94d 100644 --- a/scribo/sandbox/raphael/code/test.cc +++ b/scribo/sandbox/raphael/code/test.cc @@ -1,6 +1,7 @@ #include <vector> -#include <mln/io/all.hh> +#include <mln/io/pbm/all.hh> +#include <mln/io/ppm/all.hh> #include <mln/core/site_set/p_vertices.hh> #include <mln/core/image/graph_elt_window.hh> @@ -16,21 +17,20 @@ #include <mln/util/timer.hh> #include <mln/debug/draw_graph.hh> #include <mln/debug/println.hh> -#include <mln/transform/all.hh> +#include <mln/transform/influence_zone_geodesic.hh> #include <mln/make/image2d.hh> #include <mln/core/alias/neighb2d.hh> #include <mln/make/influence_zone_adjacency_graph.hh> #include <mln/make/w_window2d.hh> -#include <mln/labeling/all.hh> +#include <mln/labeling/value_and_compute.hh> #include <mln/make/image.hh> #include <mln/value/rgb8.hh> #include <mln/value/int_u8.hh> #include <mln/value/int_u.hh> -#include <mln/data/all.hh> +#include <mln/labeling/colorize.hh> #include <mln/core/alias/neighb2d.hh> -#include <mln/algebra/all.hh> +#include <mln/algebra/vec.hh> #include <mln/core/image/graph_elt_neighborhood.hh> -#include <mln/literal/all.hh> #include <mln/graph/compute.hh> #include <mln/draw/plot.hh> @@ -42,10 +42,21 @@ #include <my/document/separator.hh> #include <my/document/clean.hh> +#include <my/document/recognition.hh> + +#include <my/runtime/runtime.hh> +#include <my/runtime/lib.hh> + using namespace mln; using namespace std; -void Process(std::string File, std::string Dir) +void Process(std::string File, std::string Dir, mymln::runtime::runtime< value::int_u<16> ,float,short>& runtime) { + // RUNTIME + + runtime.add_variable("FILE", Dir + "/" + File); + runtime.add_variable("DIR", Dir); + runtime.add_variable("DEBUG_FILE", Dir + "/debug_" + File); + std::cout << "Processing : " << File << endl; /* CREATE GRAPH */ @@ -61,24 +72,19 @@ void Process(std::string File, std::string Dir) uint16 areas_detected; - timer.start(); - image2d<uint16> ima_blob = labeling::blobs(ima, c8(), areas_detected); - std::cout << "CREATE BLOBS : " << timer.stop() << endl; - timer.restart(); - timer.start(); + mln_VAR( couple , mln::labeling::value_and_compute(ima, true, c8(), areas_detected, accu::shape::bbox<point2d>())); + image2d<uint16> ima_blob = couple.first(); + util::array<box2d> boxes = couple.second().first(); + //image2d<uint16> ima_blob = labeling::blobs(ima, c8(), areas_detected); + image2d<uint16> ima_influ = transform::influence_zone_geodesic(ima_blob, c8()); - std::cout << "CREATE INFLUENCE ZONE GEODESIC : " << timer.stop() << endl; - timer.restart(); - timer.start(); + util::graph grph = make::influence_zone_adjacency_graph(ima_influ, c8(), areas_detected); // mymln::debug::save_label_image(ima_influ, Dir + "/influ_" + File); - std::cout << "CREATE GRAPH : " << timer.stop() << endl; - - + /* COMPUTE GRAPH POINT POSITION */ - timer.restart(); - util::array<box2d> boxes = labeling::compute(accu::meta::shape::bbox(), ima_blob, areas_detected); + //util::array<box2d> boxes = labeling::compute(accu::meta::shape::bbox(), ima_blob, areas_detected); typedef p_vertices<util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; typedef graph_elt_neighborhood<util::graph, g_vertices_p> g_nbh; fun::i2v::array<point2d> graph_points(areas_detected + 1); @@ -87,18 +93,20 @@ void Process(std::string File, std::string Dir) {graph_points(N + 1) = boxes[N + 1].pcenter();} g_vertices_p area_grph(grph, graph_points); - std::cout << "COMPUTE GRAPH POINT POSITION : " << timer.stop() << endl; - /* WORK ON GRAPH */ - - - timer.restart(); + + std::cout << "INITIALIZING : " << timer.stop() << endl; + timer.restart(); + /* WORK ON GRAPH */ mymln::document::document<uint16,float,short> doc(ima_blob, ima_influ, boxes, area_grph, areas_detected); + runtime.set_current_document(&doc); + doc.debug_set_image(ima); doc.vertical_separator_ratio_range(0.0f, 0.2f); doc.horizontal_separator_ratio_range(6.0f, 1000.0f); doc.container_volume_range(40, 100); + for (uint16 N = 1; N <= areas_detected; N++) { @@ -114,113 +122,139 @@ void Process(std::string File, std::string Dir) } //mymln::debug::save_label_image(ima_influ, "influ_" + File); - + /* mymln::document::clean_containers_items(doc); mymln::document::clean_letters_items(doc); mymln::document::clean_get_lines(doc); + + + mymln::document::clean_letters_alone(doc); + doc.cook_lines(); + mymln::document::clean_included_letters(doc); + doc.recook_lines(); mymln::document::clean_dot_items(doc); - doc.cook_lines(); - mymln::document::clean_quote_items(doc, Dir + "/" + "quote_graph_" + File, doc.image_mask_letters()); + doc.recook_lines(); + mymln::document::clean_quote_items(doc); + doc.recook_lines(); + + mymln::document::clean_between(doc); + doc.recook_lines(); + doc.compute_letter_middle_height(); + doc.compute_letter_middle_width(); + mymln::document::clean_odd_letters(doc); + doc.recook_lines(); + +*/ + + /*doc.compute_letter_middle_space(); + mymln::document::clean_lines_space(doc, Dir + "/" + "quote_graph_" + File, doc.image_mask_letters()); + doc.recook_lines();*/ + +/* mymln::document::separators::separators_find_allign(doc); mymln::document::separators::separators_make_clean(doc); doc.cook_separators(); - std::cout << "-> compute separator left " << endl; doc.cook_line_splitting(); - + + mymln::document::clean_line_link_item(doc); - mymln::document::clean_proximity_lines(doc); + mymln::document::clean_proximity_lines(doc); mymln::document::clean_quote_lines(doc); + doc.recook_lines(); + + + + doc.reset_implicit_separators(); - std::cout << "-> clean separator right " << endl; mymln::document::separators::separators_find_allign_right(doc); - mymln::document::separators::separators_make_clean(doc); - std::cout << "-> compute separator right " << endl; + mymln::document::separators::separators_make_clean_right(doc); doc.cook_separators_right(); doc.cook_line_splitting_exclusive(); - std::cout << "-> clean separator right " << endl; - mymln::document::clean_line_link_item(doc); - mymln::document::clean_proximity_lines(doc); - std::cout << "-> clean " << endl; - mymln::document::clean_quote_lines(doc); - mymln::document::clean_alone_letters_lines(doc, Dir + "/" + "alone_graph_" + File, doc.image_mask_letters()); + mymln::document::clean_line_link_item(doc); + + mymln::document::clean_proximity_lines(doc); + mymln::document::clean_quote_lines(doc); + mymln::document::clean_alone_letters_lines(doc); doc.recook_lines(); + + + doc.compute_letter_middle_height(); + doc.compute_letter_middle_width(); + mymln::document::clean_odd_letters(doc); + doc.recook_lines(); + */ + /* + mymln::document::clean_lines_space(doc, Dir + "/" + "alone_graph_" + File, doc.image_mask_letters()); + doc.recook_lines();*/ + + /* mymln::document::remove_alone_letter(doc); doc.recook_lines(); - mymln::document::clean_paragraph_items(doc, Dir + "/" + "para_graph_" + File, doc.image_mask_letters()); + mymln::document::clean_paragraph_items(doc); doc.cook_paragraphs(); - std::cout << "WORK ON GRAPH : " << timer.stop() << endl; - //io::ppm::save(ima_influ, "separator.ppm"); - //io::pbm::save(doc.image_mask_separators(),"separators"); - // io::pbm::save(doc.image_mask_letters(),Dir + "/" + "letters_" + File); - //io::pbm::save(doc.image_mask_alone_letters(),Dir + "/" + "letters_alone_" + File); - //io::pbm::save(doc.image_mask_separators(),Dir + "/" + "separators_" + File); - //io::pbm::save(doc.image_mask_containers(),Dir + "/" + "containers_" + File); - //io::pbm::save(doc.image_mask_noise(),Dir + "/" + "noise_" + File); - - - - //doc.debug_save_lines(Dir + "/" + "lines_" + File); - doc.debug_save_all(Dir + "/" + "debug_" + File, ima); - //mymln::debug::save_graph_image(doc.fun_mask_implicit_separators_left(), doc.image_mask_letters(), Dir + "/" + "graph_imp_sep_line_" + File); - //doc.debug_save_separators(Dir + "/" + "imp_sep_graph_" + File); + - /* typedef vertex_image<point2d,bool> v_ima_g; - v_ima_g mask = doc.fun_mask_letters(); -*/ - /*image2d<bool> out(3500,3500); - + mymln::document::clean_paragraphs_up(doc); + doc.recook_paragraphs(); + mymln::document::clean_paragraphs_large(doc); + doc.recook_paragraphs(); + mymln::document::clean_included_paragraphs(doc); + doc.recook_paragraphs(); + std::cout << "WORK ON GRAPH : " << timer.stop() << endl; + doc.recook_lines(); + */ + runtime.run(); + + + - mln_piter_(v_ima_g) v(mask.domain()); - typedef graph_elt_neighborhood_if<util::graph, g_vertices_p, v_ima_g> nbh_t; - nbh_t nbh(mask); - mln_niter_(nbh_t) q(nbh, v); + /* + doc.cook_lines_iter(); + std::cout << doc.get_first_line(); + + + - unsigned int fnds = 0; - for_all(v) + doc.compute_letter_middle_space(); + + mymln::document::recognize_minus(doc); + mymln::document::recognize_dot(doc); + for(int Line = doc.get_first_line(); Line; doc.get_next_line(Line)) { - unsigned int nds = 0; - for_all(q) - { - nds++; - - draw::line(out, q,v, true); - } - if(nds > 0) - { - std::cout << v << endl; - fnds++; - } - - - }*/ - //mymln::debug::draw_graph(out, mask); - //io::pbm::save(out, "maskltt.dgb"); - //std::cout << "NODES:" << fnds << endl; - // mymln::debug::save_graph_image(area_grph, ima, "graph_" + File); - // mymln::debug::save_graph_image(doc.fun_mask_separators(), ima, "separator_graph_" + File); - //mymln::debug::save_graph_image(area_grph, doc.image_mask_letters(), Dir + "/" + "graph_" + File); - //mymln::debug::save_graph_image(doc.fun_mask_letters(), doc.image_mask_letters(), Dir + "/" + "container_graph_" + File); - mln::util::array<box2d> linebx = doc.bbox_mask_lines(); - mymln::debug::save_boxes_image(linebx, doc.image_mask_letters(), Dir + "/" + "lbox_" + File); - - //mymln::debug::save_boxes_image(doc.bbox_enlarge_mask_letters(10, 0), ima, "linebox_" + File); + std::cout << doc.get_line_string(Line) << endl; + } + + //doc.debug_save_lines(Dir + "/" + "lines_" + File); + //doc.debug_save_all(Dir + "/" + "debug_" + File, ima); + */ + } int main( int argc, char** argv) { - if(argc <= 1){Process("ima.pbm", "");} + mymln::runtime::runtime< value::int_u<16> ,float,short> run; + mymln::runtime::load_clean(run); + mymln::runtime::load_debug(run); + mymln::runtime::load_cooking(run); + mymln::runtime::load_string(run); + mymln::runtime::load_system(run); + mymln::runtime::load_separators(run); + mymln::runtime::load_compute(run); + if(argc <= 1){Process("ima.pbm", "", run);} else { bool dir = false; + bool prog = false; std::string Dir = ""; + std::string Prog = ""; for(int N = 1 ; N < argc; N++) { if(dir) @@ -228,12 +262,20 @@ int main( int argc, char** argv) Dir = argv[N]; dir = false; } + else if(prog) + { + Prog = argv[N]; + run.load(Prog. c_str()); + prog = false; + } else { if(!strcmp(argv[N], "-D")) { dir = true;} + else if(!strcmp(argv[N], "-P")) + { prog = true; } else - { Process(argv[N], Dir); } + { Process(argv[N], Dir, run); } } } } -- 1.7.2.5
13 years, 3 months
1
0
0
0
last-svn-commit-885-g33e4509 Better paragraph detection and fix some bug
by Raphael Boissel
--- scribo/sandbox/raphael/code/my/document/clean.hh | 138 +++++++++++++++---- .../sandbox/raphael/code/my/document/document.hh | 148 ++++++++++++++++++- scribo/sandbox/raphael/code/my/document/letters.hh | 17 +++ scribo/sandbox/raphael/code/my/util/union.hh | 24 +++- scribo/sandbox/raphael/code/test.cc | 19 ++- 5 files changed, 303 insertions(+), 43 deletions(-) create mode 100644 scribo/sandbox/raphael/code/my/document/letters.hh diff --git a/scribo/sandbox/raphael/code/my/document/clean.hh b/scribo/sandbox/raphael/code/my/document/clean.hh index 18669d3..56c7445 100644 --- a/scribo/sandbox/raphael/code/my/document/clean.hh +++ b/scribo/sandbox/raphael/code/my/document/clean.hh @@ -315,30 +315,33 @@ namespace mymln { typedef vertex_image<point2d,bool> v_ima_g; typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; - v_ima_g mask = doc.fun_mask_letters(); + v_ima_g mask = doc.fun_mask_all_letters(); mln_piter_(v_ima_g) v(mask.domain()); typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t; nbh_t nbh(mask); mln_niter_(nbh_t) q(nbh, v); for_all(v) { - if(doc.contain_letter(v)) - { if(doc.contain_line(v)) { for_all(q) { - if(doc.allign_V(q,v) && doc.allign_size(q, v) && doc.allign_proximity(q,v)) - { - doc.add_to_line_link(v, q); - } - else if(doc.allign_size_height_line(q,v) && doc.allign_proximity_line(q,v) && doc.allign_V_line(q, v)) + if(doc.contain_line(q)) { - doc.add_to_line_link(v, q); + if(doc.allign_V(q,v) && doc.allign_size(q, v) && doc.allign_proximity(q,v)) + { + doc.add_to_line_link(v, q); + } + else if(doc.allign_size_height_line(q,v)) + { + if(doc.allign_proximity_line(q,v) && doc.allign_V_line(q, v)) + { + doc.add_to_line_link(v, q); + } + } } } } - } } doc.propage_line_link(); } @@ -352,7 +355,7 @@ namespace mymln #endif typedef vertex_image<point2d,bool> v_ima_g; typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; - v_ima_g mask = doc.fun_mask_start_lines(); + v_ima_g mask = doc.fun_mask_start_end_lines(); mln_piter_(v_ima_g) v(mask.domain()); typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t; nbh_t nbh(mask); @@ -364,41 +367,71 @@ namespace mymln { if(doc.contain_line(v) && doc.get_beginning_of_line(v) == doc[v]) { - doc.jump_to_paragraph(v); + doc.jump_to_paragraph(v); + if(!doc.contain_paragraph(v)) + { doc.add_to_paragraph(v); } + for_all(q) { - if(doc.allign_H_Large(q,v) && doc.allign_size(q, v)) + if(doc.allign_H_Large(q,v) && doc.allign_size(q, v) && doc.allign_proximity_V_line(v,q)) { if(doc.contain_paragraph(q)) { - if(!doc.contain_paragraph(v)) - { - doc.add_to_paragraph(v); - - } - doc.add_to_paragraph_link(q, v); + doc.add_to_paragraph(q); + doc.add_to_paragraph_link(q, v); draw::line(out, q,v, mln::literal::green); } else { - + doc.add_to_paragraph(q); + doc.add_to_paragraph_link(v, q); + draw::line(out, q,v, mln::literal::magenta); + } + + } + } + } + else if(doc.contain_line(v) && doc.get_end_of_line(v) == doc[v]){} + else if(doc.contain_line(v)) + { + for_all(q) + { + if( + doc.get_beginning_of_line(q) == doc[q] && + doc.allign_H_Large(q,v) && + doc.allign_size(q, v) && + doc.allign_proximity_V_line(v,q) && + doc.allign_bottom_line(q,v) + ) + { + if(doc.contain_paragraph(q)) + { + doc.jump_to_paragraph(q); if(!doc.contain_paragraph(v)) { - doc.add_to_paragraph(q); doc.add_to_paragraph(v); - doc.add_to_paragraph_self_link(q); doc.add_to_paragraph_link(q, v); } else { - doc.add_to_paragraph(q); doc.add_to_paragraph_link(v, q); } - draw::line(out, q,v, mln::literal::magenta); + draw::line(out, q,v, mln::literal::blue); + } + else + { + doc.jump_to_paragraph(v); + if(!doc.contain_paragraph(v)) + { + doc.add_to_paragraph(v); + } + doc.add_to_paragraph(q); + doc.add_to_paragraph_link(v, q); + draw::line(out, q,v, mln::literal::blue); } - } } + } } } @@ -426,8 +459,7 @@ namespace mymln doc.get_line_length(q) < 5 && doc.allign_smaller_line(v,q) && doc.get_line_length(v) > 3 && - doc.allign_proximity_line(v,q) && - doc.allign_V_line(v,q) + doc.allign_proximity_line(v,q) ) { if(doc.allign_base_line_line(v,q) && doc.get_line_length(q) < 3) @@ -437,8 +469,60 @@ namespace mymln } } } + } + doc.propage_line_link(); + } + template<typename L, typename F, typename D> + void clean_alone_letters_lines(mymln::document::document<L,F,D>& doc, std::string dgb_out,image2d<bool> s) + { + image2d<value::rgb8> out; + mln::initialize(out, s); + typedef vertex_image<point2d,bool> v_ima_g; + typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; + v_ima_g mask = doc.fun_mask_alone_letters(); + mln_piter_(v_ima_g) v(mask.domain()); + typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t; + nbh_t nbh(mask); + mln_niter_(nbh_t) q(nbh, v); + for_all(v) + { + if(doc.contain_line(v)) + { + for_all(q) + { + draw::line(out, q,v, mln::literal::red); + if(doc.line_has(v,q)) + {doc.add_to_line_link(v, q); draw::line(out, q,v, mln::literal::green);} + + } + } + } + doc.propage_line_link(); + io::ppm::save(mln::debug::superpose(out, s, literal::white),dgb_out); + } + + template<typename L, typename F, typename D> + void remove_alone_letter(mymln::document::document<L,F,D>& doc) + { + typedef vertex_image<point2d,bool> v_ima_g; + typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; + v_ima_g mask = doc.fun_mask_alone_letters(); + mln_piter_(v_ima_g) v(mask.domain()); + typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t; + nbh_t nbh(mask); + mln_niter_(nbh_t) q(nbh, v); + for_all(v) + { + for_all(q) + { + if(doc.in_header(q) || doc.in_footer(q)){continue;} + doc.add_noise(q); + } } } + + + } } diff --git a/scribo/sandbox/raphael/code/my/document/document.hh b/scribo/sandbox/raphael/code/my/document/document.hh index f6204de..1a84edb 100644 --- a/scribo/sandbox/raphael/code/my/document/document.hh +++ b/scribo/sandbox/raphael/code/my/document/document.hh @@ -79,6 +79,17 @@ namespace mymln Areas_Number_ = Areas + 1; } + /* OPERATION ON PAGE */ + inline bool in_header(const point2d& p) + { return p[0] < (img_influ.domain().len(0) / 8);} + inline bool in_header(Label lbl) + { return in_header(_bboxgp[lbl]); } + + inline bool in_footer(const point2d& p) + { return p[0] > ((img_influ.domain().len(0) / 8) * 7);} + inline bool in_footer(Label lbl) + { return in_footer(_bboxgp[lbl]); } + /* OPERATION ON PARAGRAPH */ inline bool link_paragraphs() { @@ -140,7 +151,8 @@ namespace mymln inline void split_line_exclusive(const Label lbl) { if(lbl == 0){return;} - lines_union.add_self_link(lbl); + if(!lines_union.is_self_link(lbl)) + lines_union.add_self_link(lbl); Label pos = get_end_of_line(lbl); if(pos == lbl){return;} @@ -165,7 +177,8 @@ namespace mymln inline void split_line(const Label lbl) { if(lbl == 0){return;} - lines_union.add_self_link(lbl); + if(!lines_union.is_self_link(lbl)) + lines_union.add_self_link(lbl); Label pos = get_beginning_of_line(lbl); if(pos == lbl){return;} @@ -201,7 +214,8 @@ namespace mymln add_to_line(N); } else if(end_lines_mask(N)) - lines_union.add_self_link(N); + if(!lines_union.is_self_link(N)) + lines_union.add_self_link(N); else {lines_union.invalidate_link(N);} } @@ -238,6 +252,7 @@ namespace mymln add_to_line(N); } else if(start_lines_mask(N)) + if(!lines_union.is_self_link(N)) lines_union.add_self_link(N); else {lines_union.invalidate_link(N);} @@ -325,6 +340,7 @@ namespace mymln alone_letters_mask(lbl) = false; noise_mask(lbl) = true; + lines_union[lbl] = 0; } void inline add(Label lbl, int link) { @@ -571,7 +587,24 @@ namespace mymln inline bool allign_size_height( const point2d& Left, const point2d& Right) {return allign_size_height(img_influ(Left), img_influ(Right));} + + inline bool allign_proximity_V( const point2d& Left, const point2d& Right) + {return allign_proximity_V(img_influ(Left), img_influ(Right));} + inline bool allign_proximity_V( const Label Left, const Label Right) + { + short int SizeL0 = label_size_(0, Left); + short int SizeL1 = label_size_(1, Left); + short int Swap = 0; + if(SizeL0 < SizeL1) + { SizeL0 = SizeL1; } + short int Dis = _bboxgp[Left].pmin()[0] - _bboxgp[Right].pmin()[0]; + if(Dis < 0) + Dis = -Dis; + return Dis < SizeL0 * 1.5f; + } + + inline bool allign_proximity( const point2d& Left, const point2d& Right) {return allign_proximity(img_influ(Left), img_influ(Right));} @@ -601,7 +634,7 @@ namespace mymln { short int SizeL = lines_bbox[lines_union[Left]].len(0); short int SizeR = lines_bbox[lines_union[Right]].len(0); - return SizeR > (SizeL / 2) && SizeR < (SizeL * 2); + return SizeR > (SizeL / 2.2f) && SizeR < (SizeL * 2.2); } inline bool allign_proximity_line( const Label Left, const Label Right) @@ -625,7 +658,28 @@ namespace mymln } + inline bool allign_proximity_V_line( const point2d& Left, const point2d& Right) + {return allign_proximity_V_line(img_influ(Left), img_influ(Right));} + inline bool allign_proximity_V_line( const Label Left, const Label Right) + { + box2d LB = lines_bbox[lines_union[Left]]; + box2d RB = lines_bbox[lines_union[Right]]; + + int DisA = LB.pmax()[0] - RB.pmin()[0]; + int DisB = RB.pmax()[0] - LB.pmin()[0]; + if(DisA < 0){DisA = -DisA;} + if(DisB < 0){DisB = -DisB;} + if(DisA > DisB) + { DisA = DisB; } + + unsigned int HA = LB.len(0); + unsigned int HB = RB.len(0); + + if(HA < HB) + { HA = HB; } + return (DisA * 1.5f) < HA; + } inline bool allign_proximity_large( const point2d& Left, const point2d& Right) {return allign_proximity_large(img_influ(Left), img_influ(Right));} @@ -696,6 +750,7 @@ namespace mymln { short int allignV = lines_bbox[lines_union[Left]].pcenter()[0] - lines_bbox[lines_union[Right]].pcenter()[0]; if(allignV<0){allignV = -allignV;} + allignV *= 2; return allignV < lines_bbox[lines_union[Left]].len(0) && allignV < lines_bbox[lines_union[Right]].len(0); } @@ -746,6 +801,20 @@ namespace mymln allignV < lines_bbox[lines_union[Left]].len(0) && lines_bbox[lines_union[Left]].pcenter()[0] < lines_bbox[lines_union[Right]].pcenter()[0]; } + inline bool allign_bottom(const point2d& Left, const point2d& Right) + {return allign_bottom(img_influ(Left), img_influ(Right));} + inline bool allign_bottom(const Label Left, const Label Right) + { + return _bboxgp[Left].pmin()[0] < _bboxgp[Right].pmin()[0]; + } + + inline bool allign_bottom_line(const point2d& Left, const point2d& Right) + {return allign_bottom_line(img_influ(Left), img_influ(Right));} + inline bool allign_bottom_line(const Label Left, const Label Right) + { + return lines_bbox[lines_union[Left]].pmin()[0] < lines_bbox[lines_union[Right]].pmin()[0]; + } + inline bool allign_base_line(const point2d& Left, const point2d& Right) @@ -775,6 +844,34 @@ namespace mymln std::cout << " lines(s) : " << CLine << std::endl; } + void debug_save_all(std::string file, image2d<bool> source) + { + image2d<value::rgb8> ima_color; + mln::initialize(ima_color,img_influ); + + for(unsigned int N = 0; N < lines_bbox.size(); N++) + { + if(lines_bbox[N].is_valid()) + { + draw::box(ima_color, lines_bbox[N], mln::literal::blue); + } + } + for(unsigned int N = 0; N < paragraphs_bbox.size(); N++) + { + if(paragraphs_bbox[N].is_valid()) + { + draw::box(ima_color, paragraphs_bbox[N], mln::literal::red); + } + } + for(unsigned int N = 0; N < lines_first_label.size(); N++) + { + if(_bboxgp[lines_first_label[N]].is_valid()) + { + draw::box(ima_color, _bboxgp[lines_first_label[N]], mln::literal::yellow); + } + } + io::ppm::save(mln::debug::superpose(ima_color, source, literal::white) , file); + } void debug_save_paragraphs(std::string file) { mymln::debug::save_label_image(img, paragraphs_union , file);} void debug_save_lines(std::string file) @@ -900,7 +997,7 @@ namespace mymln cook_lines_(); } inline void reset_implicit_separators() - { implicit_separators_union.reset(); } + { implicit_separators_union.reset(); lines_split.fill(0);} inline void cook_lines() { lines_len = mln::util::array<unsigned int>(NLine + 1); @@ -1027,6 +1124,14 @@ namespace mymln { SeqP++; while(lines_iter_valid() && !lines_seq[SeqP]){SeqP++;} } inline void lines_iter_valid() { return SeqP < Areas_Number_; } + + + inline void cook_paragraphs() + { + paragraphs_bbox = mln::util::array<box2d>(NPar + 1); + cook_paragraphs_(); + } + private: fun::i2v::array<bool> implicit_separators_left_mask; fun::i2v::array<bool> implicit_separators_right_mask; @@ -1100,7 +1205,7 @@ namespace mymln } } } - + inline void cook_separators_right_() { implicit_separators_right_mask(0) = false; @@ -1234,12 +1339,12 @@ namespace mymln /* COOK THE FIRST AND THE LAST LABEL OF THE LINE */ if(lines_first_label[lines_union[N]] == 0) lines_first_label[lines_union[N]] = N; - else if(_bboxgp[N].pcenter()[1] < _bboxgp[lines_first_label[lines_union[N]]].pcenter()[1]) + else if(_bboxgp[N].pmin()[1] < _bboxgp[lines_first_label[lines_union[N]]].pmin()[1]) lines_first_label[lines_union[N]] = N; if(lines_last_label[lines_union[N]] == 0) lines_last_label[lines_union[N]] = N; - else if(_bboxgp[N].pcenter()[1] > _bboxgp[lines_last_label[lines_union[N]]].pcenter()[1]) + else if(_bboxgp[N].pmax()[1] > _bboxgp[lines_last_label[lines_union[N]]].pmax()[1]) lines_last_label[lines_union[N]] = N; /* FILL THE MASK WITH FALSE:MAYBE USELESS IF THE MASK IS INITIALIZED */ @@ -1275,6 +1380,10 @@ namespace mymln { lines_bbox[lines_union[N]].merge(_bboxgp[N]); } + if(lines_len[lines_union[N]] == 1) + { letters_mask(N) = false; alone_letters_mask(N) = true; } + else if(lines_union[N]) + { letters_mask(N) = true; alone_letters_mask(N) = false; } } } @@ -1411,11 +1520,34 @@ namespace mymln unsigned int NPar ; mln::util::array<unsigned int> paragraphs_first_label; mln::util::array<unsigned int> paragraphs_last_label; + mln::util::array<unsigned int> paragraphs_assoc; mln::util::array<box2d> paragraphs_bbox; inline void cook_paragraphs_() { + mln::util::array<unsigned int> paragraphs_assoc(lines_union.size()); + for(int N = 0; N < paragraphs_union.size(); N++) + { + if(paragraphs_union[N]) + { + if(paragraphs_assoc[lines_union[N]]) + { paragraphs_union.add_link(N, paragraphs_assoc[lines_union[N]]); } + else + {paragraphs_assoc[lines_union[N]] = N;} + } + } + paragraphs_union.propage_links(); + for(int N = 0; N < paragraphs_bbox.size(); N++) + { + paragraphs_bbox[N] = box2d(); + } + for(int N = 0; N < paragraphs_union.size(); N++) + { + if(paragraphs_union[N]) + paragraphs_bbox[paragraphs_union[N]].merge(lines_bbox[lines_union[N]]); + + } } diff --git a/scribo/sandbox/raphael/code/my/document/letters.hh b/scribo/sandbox/raphael/code/my/document/letters.hh new file mode 100644 index 0000000..6701943 --- /dev/null +++ b/scribo/sandbox/raphael/code/my/document/letters.hh @@ -0,0 +1,17 @@ +#ifndef INC_CLEAN_LETTER_DOC +#define INC_CLEAN_LETTER_DOC +#include<my/document/document.hh> +#include <mln/core/image/graph_elt_neighborhood.hh> +#include <mln/core/image/vertex_image.hh> +using namespace mln; + +namespace mymln +{ + namespace document + { + void clean_letter_aberation() + { + + } + } +} \ No newline at end of file diff --git a/scribo/sandbox/raphael/code/my/util/union.hh b/scribo/sandbox/raphael/code/my/util/union.hh index 53fcbb3..90a7e68 100644 --- a/scribo/sandbox/raphael/code/my/util/union.hh +++ b/scribo/sandbox/raphael/code/my/util/union.hh @@ -28,12 +28,23 @@ namespace mymln inline void invalidate_link(const Label A) { mark_link[A] = 0; } inline void add_self_link(const Label A) - { mark_link[A] = A; } + { + if(!A){return;} + if(mark_link[A] == 0) + mark_link[A] = A; + else + { + unsigned int Pos = find_parent_(A); + if(Pos) + mark_link[Pos] = A; + mark_link[A] = A; + } + } inline unsigned int link(const unsigned int index) {return mark_link[index]; } inline void add_link(const Label A, const Label B) { - + if(!B || !A){return;} unsigned int Pos = find_parent_(A); if(mark_link[B] == 0) { @@ -84,7 +95,14 @@ namespace mymln inline unsigned int find_parent_(const Label A) { unsigned int Pos = A; - while(Pos != mark_link[Pos] && Pos != 0){Pos = mark_link[Pos];} + unsigned int OldPos = A; + while(Pos != mark_link[Pos] && Pos != 0) + { + + Pos = mark_link[Pos]; + mark_link[OldPos] = mark_link[Pos]; + OldPos = Pos; + } return Pos; } mln::util::array<unsigned int> mark; diff --git a/scribo/sandbox/raphael/code/test.cc b/scribo/sandbox/raphael/code/test.cc index b009c2e..feaf817 100644 --- a/scribo/sandbox/raphael/code/test.cc +++ b/scribo/sandbox/raphael/code/test.cc @@ -127,25 +127,32 @@ void Process(std::string File, std::string Dir) mymln::document::separators::separators_find_allign(doc); mymln::document::separators::separators_make_clean(doc); doc.cook_separators(); + std::cout << "-> compute separator left " << endl; doc.cook_line_splitting(); + mymln::document::clean_line_link_item(doc); mymln::document::clean_proximity_lines(doc); mymln::document::clean_quote_lines(doc); - doc.reset_implicit_separators(); + std::cout << "-> clean separator right " << endl; mymln::document::separators::separators_find_allign_right(doc); mymln::document::separators::separators_make_clean(doc); + std::cout << "-> compute separator right " << endl; doc.cook_separators_right(); doc.cook_line_splitting_exclusive(); + std::cout << "-> clean separator right " << endl; mymln::document::clean_line_link_item(doc); mymln::document::clean_proximity_lines(doc); + std::cout << "-> clean " << endl; mymln::document::clean_quote_lines(doc); - + mymln::document::clean_alone_letters_lines(doc, Dir + "/" + "alone_graph_" + File, doc.image_mask_letters()); + doc.recook_lines(); + mymln::document::remove_alone_letter(doc); doc.recook_lines(); mymln::document::clean_paragraph_items(doc, Dir + "/" + "para_graph_" + File, doc.image_mask_letters()); - + doc.cook_paragraphs(); std::cout << "WORK ON GRAPH : " << timer.stop() << endl; //io::ppm::save(ima_influ, "separator.ppm"); //io::pbm::save(doc.image_mask_separators(),"separators"); @@ -157,7 +164,8 @@ void Process(std::string File, std::string Dir) - doc.debug_save_paragraphs(Dir + "/" + "lines_" + File); + //doc.debug_save_lines(Dir + "/" + "lines_" + File); + doc.debug_save_all(Dir + "/" + "debug_" + File, ima); //mymln::debug::save_graph_image(doc.fun_mask_implicit_separators_left(), doc.image_mask_letters(), Dir + "/" + "graph_imp_sep_line_" + File); //doc.debug_save_separators(Dir + "/" + "imp_sep_graph_" + File); @@ -199,8 +207,9 @@ void Process(std::string File, std::string Dir) // mymln::debug::save_graph_image(doc.fun_mask_separators(), ima, "separator_graph_" + File); //mymln::debug::save_graph_image(area_grph, doc.image_mask_letters(), Dir + "/" + "graph_" + File); //mymln::debug::save_graph_image(doc.fun_mask_letters(), doc.image_mask_letters(), Dir + "/" + "container_graph_" + File); -mln::util::array<box2d> linebx = doc.bbox_mask_lines(); + mln::util::array<box2d> linebx = doc.bbox_mask_lines(); mymln::debug::save_boxes_image(linebx, doc.image_mask_letters(), Dir + "/" + "lbox_" + File); + //mymln::debug::save_boxes_image(doc.bbox_enlarge_mask_letters(10, 0), ima, "linebox_" + File); } -- 1.7.2.5
13 years, 3 months
1
0
0
0
last-svn-commit-884-gf5c0102 Add the detection of Right implicit separator and improve lines detection
by Raphael Boissel
--- scribo/sandbox/raphael/code/my/debug/pict.hh | 9 +- scribo/sandbox/raphael/code/my/document/clean.hh | 227 ++++++- .../sandbox/raphael/code/my/document/document.hh | 715 +++++++++++++++++++- .../sandbox/raphael/code/my/document/separator.hh | 118 +++- scribo/sandbox/raphael/code/my/util/union.hh | 12 +- scribo/sandbox/raphael/code/test.cc | 57 ++- 6 files changed, 1066 insertions(+), 72 deletions(-) diff --git a/scribo/sandbox/raphael/code/my/debug/pict.hh b/scribo/sandbox/raphael/code/my/debug/pict.hh index 56fdca3..23880bc 100644 --- a/scribo/sandbox/raphael/code/my/debug/pict.hh +++ b/scribo/sandbox/raphael/code/my/debug/pict.hh @@ -41,6 +41,7 @@ namespace mymln io::ppm::save(ima_color, file); } + template<typename p_v> inline void save_graph_image(p_v& pv, unsigned int SizeX, unsigned int SizeY, std::string file) { image2d<value::rgb8> ima_graph(SizeY, SizeX); @@ -69,10 +70,14 @@ namespace mymln } template<typename I> inline void save_boxes_image(mln::util::array<box2d> boxes, I source, std::string file) { - image2d<bool> out(source.domain()); - data::fill(out, false); + image2d<bool> out; + mln::initialize(out, source); for(unsigned int N = 0 ; N < boxes.size(); N++) { + if(!boxes[N].is_valid()){continue;} + if((boxes[N]).pmin()[0] < 0 || (boxes[N]).pmin()[1] < 0 || (boxes[N]).pmax()[0] < 0 || (boxes[N]).pmax()[1] < 0 ){continue;} + if((boxes[N]).pmax()[0] > source.domain().pmax()[0] || (boxes[N]).pmax()[1] > source.domain().pmax()[1] ){continue;} + if((boxes[N]).pmin()[0] > source.domain().pmax()[0] || (boxes[N]).pmin()[1] > source.domain().pmax()[1] ){continue;} data::fill((out | (boxes[N])).rw(), true); } io::pbm::save(out , file); diff --git a/scribo/sandbox/raphael/code/my/document/clean.hh b/scribo/sandbox/raphael/code/my/document/clean.hh index 2ce8614..18669d3 100644 --- a/scribo/sandbox/raphael/code/my/document/clean.hh +++ b/scribo/sandbox/raphael/code/my/document/clean.hh @@ -83,10 +83,41 @@ namespace mymln } template<typename L, typename F, typename D> - void clean_get_lines(mymln::document::document<L,F,D>& doc, std::string dgb_out,image2d<bool> s) + void clean_letters_alone(mymln::document::document<L,F,D>& doc) + { + + typedef vertex_image<point2d,bool> v_ima_g; + typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; + v_ima_g mask = doc.fun_mask_all_letters(); + mln_piter_(v_ima_g) v(mask.domain()); + typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t; + nbh_t nbh(mask); + mln_niter_(nbh_t) q(nbh, v); + for_all(v) + { + if(doc.contain_alone_letter(v)) + { + unsigned int count = 0; + unsigned int real_count = 0; + for_all(q) + { + if(doc.contain_alone_letter(q)) + count++; + else if(doc.contain_letter(q)) + real_count++; + } + if(real_count < 2 && count > 2) + { doc.add_noise(v);} + else if(real_count == 0 && count > 1) + { doc.add_noise(v);} + } + } + + } + + template<typename L, typename F, typename D> + void clean_get_lines(mymln::document::document<L,F,D>& doc) { - image2d<value::rgb8> out; - mln::initialize(out, s); typedef vertex_image<point2d,bool> v_ima_g; typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; v_ima_g mask = doc.fun_mask_letters(); @@ -113,19 +144,17 @@ namespace mymln if((!doc.contain_line(q))) { // draw::line(out, q,v, mln::literal::blue); - if(doc.allign_V(q,v) && doc.allign_size(q, v)) + if(doc.allign_V(q,v) && doc.allign_size(q, v) && (doc.allign_proximity_large(q, v) || doc.allign_proximity_large(v, q)) ) { doc.add_to_line_link(v, q); - draw::line(out, q,v, mln::literal::magenta); All_Alone = false; } } else { - if(doc.allign_V(q,v) && doc.allign_size(q, v)) + if(doc.allign_V(q,v) && doc.allign_size(q, v) && (doc.allign_proximity_large(q, v) || doc.allign_proximity_large(v, q))) { doc.add_to_line_link(q, v); - draw::line(out, q,v, mln::literal::green); All_Alone = false; } } @@ -138,14 +167,12 @@ namespace mymln } doc.propage_line_link(); - io::ppm::save(mln::debug::superpose(out, s, literal::white),dgb_out); } + template<typename L, typename F, typename D> - void clean_dot_items(mymln::document::document<L,F,D>& doc, std::string dgb_out,image2d<bool> s) + void clean_dot_items(mymln::document::document<L,F,D>& doc) { - image2d<value::rgb8> out; - mln::initialize(out, s); typedef vertex_image<point2d,bool> v_ima_g; typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; v_ima_g mask = doc.fun_mask_alone_letters(); @@ -161,7 +188,6 @@ namespace mymln { if(!doc.allign_H(q, v) && doc.allign_base_line(v, q)) { - draw::line(out, q,v, mln::literal::green); doc.add_to_line_link(v, q); doc.add_letter_coerce(q); } @@ -180,23 +206,22 @@ namespace mymln { if (doc.allign_H_Large(v2, q2) && doc.allign_top(v2, q2)) { - draw::line(out, q2,v2, mln::literal::magenta); doc.add_to_line_link(v2, q2); doc.add_letter_coerce(q2); } } } } - io::ppm::save(mln::debug::superpose(out, s, literal::white),dgb_out); doc.propage_line_link(); } template<typename L, typename F, typename D> void clean_quote_items(mymln::document::document<L,F,D>& doc, std::string dgb_out,image2d<bool> s) { - + #ifndef NGRAPHDEBUG image2d<value::rgb8> out; mln::initialize(out, s); + #endif typedef vertex_image<point2d,bool> v_ima_g; typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; v_ima_g mask = doc.fun_mask_start_end_lines(); @@ -243,18 +268,178 @@ namespace mymln } } } + #ifndef NGRAPHDEBUG io::ppm::save(mln::debug::superpose(out, s, literal::white),dgb_out); + #endif doc.propage_line_link(); doc.recook_lines(); } - - - - + + template<typename L, typename F, typename D> + void clean_line_link_item(mymln::document::document<L,F,D>& doc) + { + typedef vertex_image<point2d,bool> v_ima_g; + typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; + v_ima_g mask = doc.fun_mask_start_end_lines(); + mln_piter_(v_ima_g) v(mask.domain()); + typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t; + nbh_t nbh(mask); + mln_niter_(nbh_t) q(nbh, v); + for_all(v) + { + if(doc.contain_letter(v)) + { + if(doc.contain_line(v)) + { + for_all(q) + { + if( + doc.allign_V_line(v,q) && + doc.allign_center_line(v, q) && + doc.allign_smaller_line(v,q) && + doc.get_line_length(q) < 3 && + doc.allign_proximity_line(v,q) + ) + { + doc.add_to_line_link(v, q); + } + } + } + } + } + } + + + template<typename L, typename F, typename D> + void clean_proximity_lines(mymln::document::document<L,F,D>& doc) + { + typedef vertex_image<point2d,bool> v_ima_g; + typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; + v_ima_g mask = doc.fun_mask_letters(); + mln_piter_(v_ima_g) v(mask.domain()); + typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t; + nbh_t nbh(mask); + mln_niter_(nbh_t) q(nbh, v); + for_all(v) + { + if(doc.contain_letter(v)) + { + if(doc.contain_line(v)) + { + for_all(q) + { + if(doc.allign_V(q,v) && doc.allign_size(q, v) && doc.allign_proximity(q,v)) + { + doc.add_to_line_link(v, q); + } + else if(doc.allign_size_height_line(q,v) && doc.allign_proximity_line(q,v) && doc.allign_V_line(q, v)) + { + doc.add_to_line_link(v, q); + } + } + } + } + } + doc.propage_line_link(); + } + + template<typename L, typename F, typename D> + void clean_paragraph_items(mymln::document::document<L,F,D>& doc, std::string dgb_out,image2d<bool> s) + { + #ifndef NGRAPHDEBUG + image2d<value::rgb8> out; + mln::initialize(out, s); + #endif + typedef vertex_image<point2d,bool> v_ima_g; + typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; + v_ima_g mask = doc.fun_mask_start_lines(); + mln_piter_(v_ima_g) v(mask.domain()); + typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t; + nbh_t nbh(mask); + doc.link_paragraphs(); + mln_niter_(nbh_t) q(nbh, v); + for_all(v) + { + if(doc.contain_letter(v)) + { + if(doc.contain_line(v) && doc.get_beginning_of_line(v) == doc[v]) + { + doc.jump_to_paragraph(v); + for_all(q) + { + if(doc.allign_H_Large(q,v) && doc.allign_size(q, v)) + { + if(doc.contain_paragraph(q)) + { + if(!doc.contain_paragraph(v)) + { + doc.add_to_paragraph(v); + + } + doc.add_to_paragraph_link(q, v); + draw::line(out, q,v, mln::literal::green); + } + else + { + + if(!doc.contain_paragraph(v)) + { + doc.add_to_paragraph(q); + doc.add_to_paragraph(v); + doc.add_to_paragraph_self_link(q); + doc.add_to_paragraph_link(q, v); + } + else + { + doc.add_to_paragraph(q); + doc.add_to_paragraph_link(v, q); + } + draw::line(out, q,v, mln::literal::magenta); + } + + } + } + } + } + } + io::ppm::save(mln::debug::superpose(out, s, literal::white),dgb_out); + doc.propage_paragraph_link(); } - - + template<typename L, typename F, typename D> + void clean_quote_lines(mymln::document::document<L,F,D>& doc) + { + typedef vertex_image<point2d,bool> v_ima_g; + typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; + v_ima_g mask = doc.fun_mask_start_end_lines(); + mln_piter_(v_ima_g) v(mask.domain()); + typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t; + nbh_t nbh(mask); + mln_niter_(nbh_t) q(nbh, v); + for_all(v) + { + if(doc.contain_line(v)) + { + for_all(q) + { + if( + doc.get_line_length(q) < 5 && + doc.allign_smaller_line(v,q) && + doc.get_line_length(v) > 3 && + doc.allign_proximity_line(v,q) && + doc.allign_V_line(v,q) + ) + { + if(doc.allign_base_line_line(v,q) && doc.get_line_length(q) < 3) + {doc.add_to_line_link(v, q);} + else if(doc.allign_up_line_line(v,q)) + {doc.add_to_line_link(v, q);} + } + } + } + } + } + } } diff --git a/scribo/sandbox/raphael/code/my/document/document.hh b/scribo/sandbox/raphael/code/my/document/document.hh index 67bda18..f6204de 100644 --- a/scribo/sandbox/raphael/code/my/document/document.hh +++ b/scribo/sandbox/raphael/code/my/document/document.hh @@ -1,7 +1,9 @@ #ifndef INC_DOCUMENT_DOC #define INC_DOCUMENT_DOC +#include <mln/accu/shape/bbox.hh> #include<my/util/vector_bbox_group.hh> #include<my/util/union.hh> +#include<my/debug/pict.hh> #include <mln/util/graph.hh> @@ -47,14 +49,24 @@ namespace mymln separators_mask = fun::i2v::array<bool>(Areas + 1); containers_mask = fun::i2v::array<bool>(Areas + 1); letters_mask = fun::i2v::array<bool>(Areas + 1); + all_letters_mask = fun::i2v::array<bool>(Areas + 1); Hseparator_mask = fun::i2v::array<bool>(Areas + 1); Vseparator_mask = fun::i2v::array<bool>(Areas + 1); noise_mask = fun::i2v::array<bool>(Areas + 1); alone_letters_mask = fun::i2v::array<bool>(Areas + 1); + implicit_separators_left_mask = fun::i2v::array<bool>(Areas + 1); + implicit_separators_right_mask = fun::i2v::array<bool>(Areas + 1); CImpSep = 1; NImpSep = 2; lines_union = mymln::util::union_find<Label>(Areas + 1); implicit_separators_union = mymln::util::union_find<Label>(Areas + 1); + + paragraphs_union = mymln::util::union_find<Label>(Areas + 1); + + tag_lbl = mln::util::array<std::string>(Areas + 1); + lines_split = mln::util::array<Label>(Areas + 1); + lines_split.fill(0); + img_influ = ima_influ; CSep = 0; CSepH = 0; @@ -62,10 +74,190 @@ namespace mymln CLet = 0; CLine = 1; NLine = 2; + CPar = 1; + NPar = 2; Areas_Number_ = Areas + 1; } + /* OPERATION ON PARAGRAPH */ + inline bool link_paragraphs() + { + for(unsigned int N = 1; N < Areas_Number_; N++) + { + paragraphs_union.invalidate_link(N); + if(start_lines_mask(N)) + { + paragraphs_union.add_self_link(N); + } + else if(contain_line(N)) + { + if(get_beginning_of_line(N) == 0){std::cout <<"ERROR#\n";} + paragraphs_union.add_link(get_beginning_of_line(N), N); + } + } + } + inline bool contain_paragraph(const point2d& point) + {return contain_paragraph(img_influ(point));} + inline bool contain_paragraph(const Label lbl) + {return paragraphs_union[lbl] != 0;} + inline void add_to_paragraph(const point2d& point) + {add_to_paragraph(img_influ(point));} + inline void add_to_paragraph(const Label lbl) + {paragraphs_union[lbl] = CPar;} + + inline void add_new_paragraph(const point2d& point) + {add_new_paragraph(img_influ(point));} + inline void add_new_paragraph(const Label lbl) + {CPar = NPar; NPar++;} + + inline void add_to_paragraph_link(const point2d& A, const point2d& B) + {add_to_paragraph_link(img_influ(A),img_influ(B));} + inline void add_to_paragraph_link(const Label A, const Label B) + {paragraphs_union.add_link(A, B);} + + inline void add_to_paragraph_self_link(const point2d& A) + {add_to_paragraph_self_link(img_influ(A));} + inline void add_to_paragraph_self_link(const Label A) + {paragraphs_union.add_self_link(A);} + + inline void propage_paragraph_link() + {paragraphs_union.propage_links();} + + inline void jump_to_paragraph(const point2d& point) + { + jump_to_paragraph(img_influ(point)); + } + inline void jump_to_paragraph(const Label lbl) + { + if(paragraphs_union[lbl] != 0) + CPar = paragraphs_union[lbl]; + else + add_new_paragraph(lbl); + } /* OPERATION ON LINES */ + inline void split_line_exclusive(const point2d& point) + {split_line_exclusive(img_influ(point));} + inline void split_line_exclusive(const Label lbl) + { + if(lbl == 0){return;} + lines_union.add_self_link(lbl); + Label pos = get_end_of_line(lbl); + if(pos == lbl){return;} + + while(lines_split[pos] && lines_split[pos] != lbl && pos != lbl) + { + if(_bboxgp[lines_split[pos]].pmin()[1] < _bboxgp[lbl].pmin()[1]) + { + lines_split[lbl] = lines_split[pos]; + lines_split[pos] = lbl; + return; + } + pos = lines_split[pos]; + } + if(pos == lbl || lines_split[pos] == lbl){return;} + lines_split[pos] = lbl; + + } + + + inline void split_line(const point2d& point) + {split_line(img_influ(point));} + inline void split_line(const Label lbl) + { + if(lbl == 0){return;} + lines_union.add_self_link(lbl); + Label pos = get_beginning_of_line(lbl); + if(pos == lbl){return;} + + while(lines_split[pos] && lines_split[pos] != lbl && pos != lbl) + { + if(_bboxgp[lines_split[pos]].pmin()[1] > _bboxgp[lbl].pmin()[1]) + { + lines_split[lbl] = lines_split[pos]; + lines_split[pos] = lbl; + return; + } + pos = lines_split[pos]; + } + if(pos == lbl || lines_split[pos] == lbl){return;} + lines_split[pos] = lbl; + + } + + + inline void cook_line_splitting_exclusive() + { + for(unsigned int N = 1; N < Areas_Number_; N++) + { + lines_union.invalidate_link(N); + if(end_lines_mask(N) || implicit_separators_right_mask(N)) + split_line_exclusive(N); + } + for(unsigned int N = 1; N < Areas_Number_; N++) + { + if(lines_union.is_self_link(N)) + { + add_new_line(N); + add_to_line(N); + } + else if(end_lines_mask(N)) + lines_union.add_self_link(N); + else + {lines_union.invalidate_link(N);} + } + lines_union[0] = 0; + lines_union.invalidate_link(0); + for(unsigned int N = 1; N < Areas_Number_; N++) + { + if(!contain_line(N) || lines_union.is_self_link(N)) + continue; + Label pos = get_end_of_line(N); + while(lines_split[pos] && _bboxgp[lines_split[pos]].pmin()[1] > _bboxgp[N].pmin()[1]) + pos = lines_split[pos]; + if(pos != 0) + {lines_union[N] = lines_union[pos]; lines_union.add_link(pos,N);} + } + + //lines_union.propage_links();lines_union + cook_lines(); + } + + inline void cook_line_splitting() + { + for(unsigned int N = 1; N < Areas_Number_; N++) + { + lines_union.invalidate_link(N); + if(start_lines_mask(N) || implicit_separators_left_mask(N)) + split_line(N); + } + for(unsigned int N = 1; N < Areas_Number_; N++) + { + if(lines_union.is_self_link(N)) + { + add_new_line(N); + add_to_line(N); + } + else if(start_lines_mask(N)) + lines_union.add_self_link(N); + else + {lines_union.invalidate_link(N);} + } + lines_union[0] = 0; + lines_union.invalidate_link(0); + for(unsigned int N = 1; N < Areas_Number_; N++) + { + if(!contain_line(N) || lines_union.is_self_link(N)) + continue; + Label pos = get_beginning_of_line(N); + while(lines_split[pos] && _bboxgp[lines_split[pos]].pmin()[1] < _bboxgp[N].pmin()[1]) + pos = lines_split[pos]; + if(pos != 0) + {lines_union[N] = lines_union[pos]; lines_union.add_link(pos,N);} + } + + //lines_union.propage_links();lines_union + cook_lines(); + } inline void add_to_line_self_link(const point2d& point) { add_to_line_self_link(img_influ(point));} inline void add_to_line(const point2d& point) @@ -87,6 +279,11 @@ namespace mymln inline bool contain_line(const point2d& point) { return contain_line(img_influ(point)); } + inline bool contain_line_start(const point2d& point) + { return contain_line_start(img_influ(point)); } + inline bool contain_line_start(const Label lbl) + { return lines_first_label(lbl); } + inline void add_to_line(const Label lbl) { lines_union[lbl] = CLine; } @@ -134,6 +331,10 @@ namespace mymln if (link == 0){add_noise(lbl);} else if (link > 30){ add_separator(lbl);} else { add_letter(lbl);} + + /* SET UP SPECIAL MASK TO FALSE */ + implicit_separators_left_mask(lbl) = false; + implicit_separators_right_mask(lbl) = false; } void inline invalid_letter(const point2d& point) {invalid_letter(img_influ(point));} @@ -166,11 +367,13 @@ namespace mymln Hseparator_mask(lbl) = false; alone_letters_mask(lbl) = true; noise_mask(lbl) = false; + all_letters_mask(lbl) = true; } void add_letter_coerce(const Label lbl) { letters_mask(lbl) = true; + all_letters_mask(lbl) = true; separators_mask(lbl) = false; containers_mask(lbl) = false; Vseparator_mask(lbl) = false; @@ -184,6 +387,7 @@ namespace mymln if(label_valid_size_Min_(lbl, 2)) { letters_mask(lbl) = true; + all_letters_mask(lbl) = true; separators_mask(lbl) = false; containers_mask(lbl) = false; Vseparator_mask(lbl) = false; @@ -209,6 +413,7 @@ namespace mymln separators_mask(lbl) = false; noise_mask(lbl) = false; alone_letters_mask(lbl) = false; + all_letters_mask(lbl) = false; } else add_noise(lbl); @@ -223,6 +428,7 @@ namespace mymln separators_mask(lbl) = true; alone_letters_mask(lbl) = false; noise_mask(lbl) = false; + all_letters_mask(lbl) = false; } void add_Vseparator(const Label lbl) { @@ -234,6 +440,7 @@ namespace mymln separators_mask(lbl) = true; alone_letters_mask(lbl) = false; noise_mask(lbl) = false; + all_letters_mask(lbl) = false; } void inline add_separator(const point2d& point) {add_letter(img_influ(point)); } @@ -259,6 +466,8 @@ namespace mymln bool inline contain_letter(const Label lbl) {return contain_(lbl, letters_mask);} + + bool inline contain_container(const Label lbl) {return contain_(lbl, containers_mask);} @@ -310,6 +519,19 @@ namespace mymln return allignV < label_size_(0, Left) && (_bboxgp[Left].pcenter()[0]) > (_bboxgp[Right].pcenter()[0]); } + inline bool allign_up_line_line( const point2d& Left, const point2d& Right) + {return allign_up_line_line(img_influ(Left), img_influ(Right));} + + inline bool allign_up_line_line( const Label Left, const Label Right) + { + short int allignV = lines_bbox[lines_union[Left]].pcenter()[0] - lines_bbox[lines_union[Right]].pcenter()[0]; + if(allignV < 0){allignV = -allignV; } + allignV *= 1.4f; + return + allignV < lines_bbox[lines_union[Left]].len(0) && + (lines_bbox[lines_union[Left]].pcenter()[0]) > (lines_bbox[lines_union[Left]].pcenter()[0]); + } + inline bool allign_H_Large( const point2d& Left, const point2d& Right) {return allign_H_Large(img_influ(Left), img_influ(Right));} @@ -328,9 +550,101 @@ namespace mymln return allignH < label_size_(1, Left) && allignH < label_size_(1, Right); } - inline bool allign_size_height( const point2d& Left, const point2d& Right) + inline bool allign_H_min( const point2d& Left, const point2d& Right) + {return allign_H_min(img_influ(Left), img_influ(Right));} + + inline bool allign_H_min( const Label Left, const Label Right) + { + short int allignH = label_allign_min_(1, Left, Right) * 2; + return allignH < label_size_(1, Left) && allignH < label_size_(1, Right); + } + + inline bool allign_H_max( const point2d& Left, const point2d& Right) + {return allign_H_max(img_influ(Left), img_influ(Right));} + + inline bool allign_H_max( const Label Left, const Label Right) + { + short int allignH = label_allign_max_(1, Left, Right) * 2; + return allignH < label_size_(1, Left) && allignH < label_size_(1, Right); + } + + + inline bool allign_size_height( const point2d& Left, const point2d& Right) {return allign_size_height(img_influ(Left), img_influ(Right));} + inline bool allign_proximity( const point2d& Left, const point2d& Right) + {return allign_proximity(img_influ(Left), img_influ(Right));} + + inline bool allign_proximity( const Label Left, const Label Right) + { + short int SizeL0 = label_size_(0, Left); + short int SizeL1 = label_size_(1, Left); + short int Swap = 0; + if(SizeL0 < SizeL1) + { SizeL0 = SizeL1; } + short int Dis = _bboxgp[Left].pmin()[1] - _bboxgp[Right].pmin()[1]; + if(Dis < 0) + Dis = -Dis; + return Dis < SizeL0 * 1.5f; + } + + inline bool allign_proximity_line( const point2d& Left, const point2d& Right) + {return allign_proximity_line(img_influ(Left), img_influ(Right));} + + + inline bool allign_size_height_line( const point2d& Left, const point2d& Right) + { + return allign_size_height_line(img_influ(Left), img_influ(Right)); + } + + inline bool allign_size_height_line( const Label Left, const Label Right) + { + short int SizeL = lines_bbox[lines_union[Left]].len(0); + short int SizeR = lines_bbox[lines_union[Right]].len(0); + return SizeR > (SizeL / 2) && SizeR < (SizeL * 2); + } + + inline bool allign_proximity_line( const Label Left, const Label Right) + { + box2d LB = lines_bbox[lines_union[Left]]; + box2d RB = lines_bbox[lines_union[Right]]; + + int DisA = LB.pmax()[1] - RB.pmin()[1]; + int DisB = RB.pmax()[1] - LB.pmin()[1]; + if(DisA < 0){DisA = -DisA;} + if(DisB < 0){DisB = -DisB;} + if(DisA > DisB) + { DisA = DisB; } + + unsigned int HA = LB.len(0); + unsigned int HB = RB.len(0); + + if(HA < HB) + { HA = HB; } + return (DisA * 5) < HA; + } + + + + + inline bool allign_proximity_large( const point2d& Left, const point2d& Right) + {return allign_proximity_large(img_influ(Left), img_influ(Right));} + + inline bool allign_proximity_large( const Label Left, const Label Right) + { + short int SizeL0 = label_size_(0, Left); + short int SizeL1 = label_size_(1, Left); + short int Swap = 0; + if(SizeL0 < SizeL1) + { SizeL0 = SizeL1; } + short int Dis = _bboxgp[Left].pmin()[1] - _bboxgp[Right].pmin()[1]; + if(Dis < 0) + Dis = -Dis; + return Dis < SizeL0 * 3; + } + + + inline bool allign_size_height( const Label Left, const Label Right) { short int SizeL = label_size_(0, Left); @@ -374,6 +688,34 @@ namespace mymln short int allignV = label_allign_(0, Left, Right) * 2; return allignV < label_size_(0, Left) && allignV < label_size_(0, Right); } + + inline bool allign_V_line( const point2d& Left, const point2d& Right) + {return allign_V_line(img_influ(Left), img_influ(Right));} + + inline bool allign_V_line( Label Left, Label Right) + { + short int allignV = lines_bbox[lines_union[Left]].pcenter()[0] - lines_bbox[lines_union[Right]].pcenter()[0]; + if(allignV<0){allignV = -allignV;} + return allignV < lines_bbox[lines_union[Left]].len(0) && allignV < lines_bbox[lines_union[Right]].len(0); + } + + inline bool allign_center_line( const point2d& Left, const point2d& Right) + {return allign_center_line(img_influ(Left), img_influ(Right));} + inline bool allign_center_line( Label Left, Label Right) + { + short int allignC = lines_bbox[lines_union[Left]].pcenter()[0] - lines_bbox[lines_union[Right]].pcenter()[0]; + if(allignC<0){allignC = -allignC;} + return allignC * 5 < lines_bbox[lines_union[Left]].len(0); + } + + inline bool allign_smaller_line( const point2d& Left, const point2d& Right) + {return allign_smaller_line(img_influ(Left), img_influ(Right));} + inline bool allign_smaller_line( Label Left, Label Right) + { + return lines_bbox[lines_union[Left]].len(0) > (lines_bbox[lines_union[Right]].len(0) * 2); + } + + inline bool allign_V_large( const point2d& Left, const point2d& Right) {return allign_V_large(img_influ(Left), img_influ(Right));} @@ -393,6 +735,18 @@ namespace mymln return allignV < label_size_(0, Left) && allignV < label_size_(0, Right); } + inline bool allign_base_line_line(const point2d& Left, const point2d& Right) + {return allign_base_line_line(img_influ(Left), img_influ(Right));} + inline bool allign_base_line_line(const Label Left, const Label Right) + { + short int allignV = lines_bbox[lines_union[Left]].pcenter()[0] - lines_bbox[lines_union[Right]].pcenter()[0]; + if(allignV<0){allignV = -allignV;} + allignV *= 1.5f; + return + allignV < lines_bbox[lines_union[Left]].len(0) && + lines_bbox[lines_union[Left]].pcenter()[0] < lines_bbox[lines_union[Right]].pcenter()[0]; + } + inline bool allign_base_line(const point2d& Left, const point2d& Right) {return allign_base_line(img_influ(Left), img_influ(Right));} @@ -421,6 +775,8 @@ namespace mymln std::cout << " lines(s) : " << CLine << std::endl; } + void debug_save_paragraphs(std::string file) + { mymln::debug::save_label_image(img, paragraphs_union , file);} void debug_save_lines(std::string file) { mymln::debug::save_label_image(img, lines_union , file);} void debug_save_separators(std::string file) @@ -431,6 +787,12 @@ namespace mymln { return fun_mask_(containers_mask); } vertex_image<point2d,bool> fun_mask_alone_letters() { return fun_mask_(alone_letters_mask); } + vertex_image<point2d,bool> fun_mask_implicit_separators_left() + { return fun_mask_(implicit_separators_left_mask); } + vertex_image<point2d,bool> fun_mask_implicit_separators_right() + { return fun_mask_(implicit_separators_right_mask); } + vertex_image<point2d,bool> fun_mask_all_letters() + {return fun_mask_(all_letters_mask);} vertex_image<point2d,bool> fun_mask_all() { typedef vertex_image<point2d,bool> v_ima_g; @@ -450,6 +812,10 @@ namespace mymln { return image_mask_(containers_mask); } image2d<bool> image_mask_separators() { return image_mask_(separators_mask); } + image2d<bool> image_mask_implicit_separators_left() + { return image_mask_(implicit_separators_left_mask); } + image2d<bool> image_mask_implicit_separators_right() + { return image_mask_(implicit_separators_right_mask); } image2d<bool> image_mask_letters() { return image_mask_(letters_mask); } image2d<bool> image_mask_noise() @@ -461,6 +827,8 @@ namespace mymln image2d<bool> image_mask_end_lines() { return image_mask_(end_lines_mask); } + mln::util::array<box2d> bbox_mask_lines() + { return lines_bbox; } mln::util::array<box2d> bbox_mask_containers() { return bbox_mask_(containers_mask); } mln::util::array<box2d> bbox_mask_separators() @@ -482,30 +850,42 @@ namespace mymln Label get_label(point2d point) { return img_influ(point); } - unsigned int get_line_length(point2d point) + inline unsigned int get_line_length(point2d point) { return get_line_length(img_influ(point)); } - unsigned int get_line_length(Label L) + inline unsigned int get_line_length(Label L) { return lines_len[lines_union[L]]; } - unsigned int get_beginning_of_line(point2d point) + inline unsigned int get_line_width(point2d point) + { return get_line_width(img_influ(point)); } + + inline unsigned int get_line_width(Label L) + { return lines_bbox[lines_union[L]].len(1); } + + inline bool line_has(point2d Line, point2d Point) + { return line_has(img_influ(Line), Point); } + + inline bool line_has(Label Line, point2d Point) + { return lines_bbox[lines_union[Line]].has(Point); } + + inline unsigned int get_beginning_of_line(point2d point) { return get_beginning_of_line(img_influ(point)); } - unsigned int get_beginning_of_line(Label L) + inline unsigned int get_beginning_of_line(Label L) { return lines_first_label[lines_union[L]]; } - unsigned int get_end_of_line(point2d point) + inline unsigned int get_end_of_line(point2d point) { return get_end_of_line(img_influ(point)); } - unsigned int get_end_of_line(Label L) + inline unsigned int get_end_of_line(Label L) { return lines_last_label[lines_union[L]]; } - unsigned int get_parent_line(point2d point) + inline unsigned int get_parent_line(point2d point) { return lines_union[img_influ(point)]; } - unsigned int get_parent_line(Label L) + inline unsigned int get_parent_line(Label L) { return lines_union[L]; } @@ -514,21 +894,46 @@ namespace mymln lines_first_label.fill(0); lines_last_label.fill(0); lines_len.fill(0); + start_lines_mask(0) = false; + end_lines_mask(0) = false; + cook_lines_(); } + inline void reset_implicit_separators() + { implicit_separators_union.reset(); } inline void cook_lines() { - lines_len = mln::util::array<unsigned int>(CLine + 1); - lines_first_label = mln::util::array<unsigned int>(CLine + 1); - lines_last_label = mln::util::array<unsigned int>(CLine + 1); + lines_len = mln::util::array<unsigned int>(NLine + 1); + lines_first_label = mln::util::array<unsigned int>(NLine + 1); + lines_last_label = mln::util::array<unsigned int>(NLine + 1); start_lines_mask = fun::i2v::array<bool>(Areas_Number_); end_lines_mask = fun::i2v::array<bool>(Areas_Number_); start_end_lines_mask = fun::i2v::array<bool>(Areas_Number_); + lines_bbox = mln::util::array<box2d>(NLine + 1); lines_len.fill(0); start_lines_mask(0) = false; end_lines_mask(0) = false; cook_lines_(); } + + + inline void cook_separators() + { + separators_len_left = mln::util::array<unsigned int>(NImpSep + 1); + separators_middle = mln::util::array<unsigned int>(NImpSep + 1); + separators_len_left.fill(0); + separators_middle.fill(0); + cook_separators_(); + } + + inline void cook_separators_right() + { + separators_len_right = mln::util::array<unsigned int>(NImpSep + 1); + separators_middle.resize(NImpSep + 1); + separators_len_right.fill(0); + separators_middle.fill(0); + cook_separators_right_(); + } inline void propage_line_link() { lines_union.propage_links(); } /*image_if<image2d<Label> masked_image_letters() @@ -575,35 +980,251 @@ namespace mymln inline bool contain_implicit_separator(const Label lbl) {return implicit_separators_union[lbl] != 0; } - inline void add_to_separator(const point2d& point) - { add_to_separator(img_influ(point)); } - inline void add_to_separator(const Label lbl) - { implicit_separators_union[lbl] = CImpSep; } + + + inline void add_to_separator_left(const point2d& point) + { add_to_separator_left(img_influ(point)); } + inline void add_to_separator_left(const Label lbl) + { implicit_separators_union[lbl] = CImpSep; implicit_separators_left_mask(lbl) = true; } + + inline void add_to_separator_right(const point2d& point) + { add_to_separator_right(img_influ(point)); } + inline void add_to_separator_right(const Label lbl) + { implicit_separators_union[lbl] = CImpSep; implicit_separators_right_mask(lbl) = true; } inline void invalidate_implicit_separator(const point2d& point) - { invalidate_implicit_separator(img_influ(point)); } + { invalidate_implicit_separator(img_influ(point)); } inline void invalidate_implicit_separator(Label lbl) - { implicit_separators_union[lbl] = 0; } + { + implicit_separators_union[lbl] = 0; + implicit_separators_left_mask(lbl) = false; + implicit_separators_right_mask(lbl) = false; + } inline Label& operator[](point2d i) - { return img_influ(i); } + { return img_influ(i);} - inline point2d& operator[](Label i) - { return _bboxgp[i].pcenter(); } + inline point2d operator[](Label i) + { + point2d p = _bboxgp[i].pcenter(); + return p; + } + inline void tag_label(const point2d& point, std::string tag) + { tag_label(img_influ(point), tag);} + inline void tag_label(Label lbl, std::string tag) + {tag_lbl[lbl] = tag;} + /* ITER ON LINES */ + inline void cook_lines_iter() + {cook_lines_iter_();} + + inline unsigned int lines_iter_value() + {return lines_seq[SeqP]; } + inline void lines_iter_start() + { SeqP = 0; } + inline void lines_iter_next_line() + { SeqP = lines_seq_pos[get_beginning_of_line(SeqP) + 1]; } + inline void lines_iter_next_letter() + { SeqP++; while(lines_iter_valid() && !lines_seq[SeqP]){SeqP++;} } + inline void lines_iter_valid() + { return SeqP < Areas_Number_; } private: + fun::i2v::array<bool> implicit_separators_left_mask; + fun::i2v::array<bool> implicit_separators_right_mask; + mln::util::array<unsigned int> separators_len_right; + mln::util::array<unsigned int> separators_len_left; + mln::util::array<unsigned int> separators_middle; + + + + inline void cook_separators_() + { + implicit_separators_left_mask(0) = false; + for(unsigned int N = 1; N < implicit_separators_union.size(); N++) + { + if(implicit_separators_union[N] != 0) + { + separators_len_left[implicit_separators_union[N]]++; + separators_middle[implicit_separators_union[N]] += _bboxgp[N].pmin()[1]; + } + } + + /* WARNING : This method to compute the middle value is correct */ + /* and faster than merge the computing of the middle value and the */ + /* computing of the lenght of the line . However this doesn't works */ + /* if you are trying to use very big image or if you work with a 16 BITS*/ + /* processor */ + for(unsigned int N = 1; N < NImpSep + 1; N++) + { + if(separators_len_left[N] != 0) + { + if(separators_len_left[N] != 0) + separators_middle[N] /= separators_len_left[N]; + } + } + + + for(unsigned int N = 1; N < Areas_Number_; N++) + { + if(separators_len_left[implicit_separators_union[N]] < 3) + { + separators_len_left[implicit_separators_union[N]] = 0; + implicit_separators_union[N] = 0; + implicit_separators_left_mask(N) = false; + } + else if ( + _bboxgp[N].pmin()[1] < separators_middle[implicit_separators_union[N]] - 10 || + _bboxgp[N].pmin()[1] > separators_middle[implicit_separators_union[N]] + 10 + ) + { + + separators_len_left[implicit_separators_union[N]]--; + implicit_separators_union[N] = 0; + implicit_separators_left_mask(N) = false; + } + } + for(unsigned int N = 1; N < Areas_Number_; N++) + { + if(!start_lines_mask(N) || implicit_separators_union[N] == 0) + { + if( separators_len_left[implicit_separators_union[N]] > 0) + separators_len_left[implicit_separators_union[N]]--; + } + } + for(unsigned int N = 1; N < Areas_Number_; N++) + { + if(separators_len_left[implicit_separators_union[N]] < 2) + { + separators_len_left[implicit_separators_union[N]] = 0; + implicit_separators_union[N] = 0; + implicit_separators_left_mask(N) = false; + } + } + } + + inline void cook_separators_right_() + { + implicit_separators_right_mask(0) = false; + for(unsigned int N = 1; N < implicit_separators_union.size(); N++) + { + if(implicit_separators_union[N] != 0) + { + separators_len_right[implicit_separators_union[N]]++; + separators_middle[implicit_separators_union[N]] += _bboxgp[N].pmax()[1]; + } + } + + /* WARNING : This method to compute the middle value is correct */ + /* and faster than merge the computing of the middle value and the */ + /* computing of the lenght of the line . However this doesn't works */ + /* if you are trying to use very big image or if you work with a 16 BITS*/ + /* processor */ + for(unsigned int N = 1; N < NImpSep + 1; N++) + { + if(separators_len_right[N] != 0) + { + if(separators_len_right[N] != 0) + separators_middle[N] /= separators_len_right[N]; + } + } + + + for(unsigned int N = 1; N < Areas_Number_; N++) + { + if(separators_len_right[implicit_separators_union[N]] < 3) + { + separators_len_right[implicit_separators_union[N]] = 0; + implicit_separators_union[N] = 0; + implicit_separators_right_mask(N) = false; + } + else if ( + _bboxgp[N].pmax()[1] < separators_middle[implicit_separators_union[N]] - 10 || + _bboxgp[N].pmax()[1] > separators_middle[implicit_separators_union[N]] + 10 + ) + { + + separators_len_right[implicit_separators_union[N]]--; + implicit_separators_union[N] = 0; + implicit_separators_right_mask(N) = false; + } + } + for(unsigned int N = 1; N < Areas_Number_; N++) + { + if(!end_lines_mask(N) || implicit_separators_union[N] == 0) + { + if( separators_len_right[implicit_separators_union[N]] > 0) + separators_len_right[implicit_separators_union[N]]--; + } + } + for(unsigned int N = 1; N < Areas_Number_; N++) + { + if(separators_len_right[implicit_separators_union[N]] < 2) + { + separators_len_right[implicit_separators_union[N]] = 0; + implicit_separators_union[N] = 0; + implicit_separators_right_mask(N) = false; + } + } + } + // PRIVATE DATA ON LINES mln::util::array<unsigned int> lines_len; mln::util::array<unsigned int> lines_first_label; mln::util::array<unsigned int> lines_last_label; + mln::util::array<unsigned int> lines_seq; + mln::util::array<unsigned int> lines_seq_pos; + mln::util::array<box2d> lines_bbox; + mln::util::array<Label> lines_split; fun::i2v::array<bool> start_lines_mask; fun::i2v::array<bool> end_lines_mask; fun::i2v::array<bool> start_end_lines_mask; + unsigned int SeqP; - + inline void cook_lines_iter_() + { + lines_seq = mln::util::array<unsigned int>(Areas_Number_); + lines_seq_pos = mln::util::array<unsigned int>(NLine + 1); + + lines_seq.fill(0); + lines_seq_pos.fill(0); + for(unsigned int N = 0; N < NLine + 1; N++) + { + lines_seq[SeqP] = lines_first_label[N]; + lines_seq_pos[N] = SeqP; + SeqP += lines_len[N]; + } + for(unsigned int N = 1; N < Areas_Number_; N++) + { + if(contain_line(N) && !start_lines_mask(N)) + { + SeqP = lines_seq_pos[get_beginning_of_line(N)]; + SeqP++; + + while( lines_seq[SeqP] && _bboxgp[lines_seq[SeqP]].pmin()[1] < _bboxgp[N].pmin()[1] ) + SeqP++; + if(!lines_seq[SeqP]) + {lines_seq[SeqP] = N;} + else + { + unsigned int Swap1, Swap2; + Swap1 = lines_seq[SeqP]; + lines_seq[SeqP] = N; + while(lines_seq[SeqP]) + { + Swap2 = lines_seq[SeqP]; + lines_seq[SeqP] = Swap1; + Swap1 = Swap2; + } + lines_seq[SeqP] = Swap1; + } + } + } + } + inline void cook_lines_() { + Cooked_CLine = CLine; for(unsigned int N = 1; N < lines_union.size(); N++) { if(lines_union[N] != 0) @@ -628,18 +1249,34 @@ namespace mymln } } - /* SECOND STEP OF THE COOKING */ - for(unsigned int N = 0; N < CLine + 1; N++) + for(unsigned int N = 0; N < lines_first_label.size(); N++) { if( lines_first_label[N] != 0) { + lines_bbox[N] = box2d(); start_lines_mask(lines_first_label[N]) = true; end_lines_mask(lines_last_label[N]) = true; start_end_lines_mask(lines_first_label[N]) = true; start_end_lines_mask(lines_last_label[N]) = true; } + else + { + // USEFULL ONLY FOR DEBUG WHEN WE NEED TO DRAW ALL THE BOUNDING BOX + // NOTE:REMOVE IT FOR THE FINAL RELEASE + lines_bbox[N] = box2d(); + } + } + + /* THE LAST STEP OF COOKING */ + for(unsigned int N = 1; N < lines_union.size(); N++) + { + if(lines_union[N] && lines_first_label[lines_union[N]]) + { + lines_bbox[lines_union[N]].merge(_bboxgp[N]); + } } + } @@ -655,6 +1292,16 @@ namespace mymln { return ((Float)_bboxgp[label].len(0)) / ((Float)_bboxgp[label].len(1)); } + inline short int label_allign_min_(const unsigned int N, const Label l1, const Label l2) + { + short int AFactor = _bboxgp[l1].pmin()[N] - _bboxgp[l2].pmin()[N]; + return AFactor < 0 ? -AFactor : AFactor; + } + inline short int label_allign_max_(const unsigned int N, const Label l1, const Label l2) + { + short int AFactor = _bboxgp[l1].pmax()[N] - _bboxgp[l2].pmax()[N]; + return AFactor < 0 ? -AFactor : AFactor; + } inline short int label_allign_(const unsigned int N, const Label l1, const Label l2) { short int AFactor = _bboxgp[l1].pcenter()[N] - _bboxgp[l2].pcenter()[N]; @@ -741,10 +1388,13 @@ namespace mymln fun::i2v::array<bool> separators_mask; fun::i2v::array<bool> letters_mask; fun::i2v::array<bool> alone_letters_mask; + fun::i2v::array<bool> all_letters_mask; fun::i2v::array<bool> containers_mask; fun::i2v::array<bool> noise_mask; + mln::util::array<std::string> tag_lbl; + unsigned int Cooked_CLine; unsigned int CLine; unsigned int NLine; unsigned int CImpSep; @@ -756,6 +1406,22 @@ namespace mymln unsigned int CSepH ; unsigned int CSepV ; + mymln::util::union_find<Label> paragraphs_union; + unsigned int CPar ; + unsigned int NPar ; + mln::util::array<unsigned int> paragraphs_first_label; + mln::util::array<unsigned int> paragraphs_last_label; + mln::util::array<box2d> paragraphs_bbox; + + inline void cook_paragraphs_() + { + + } + + + + + /* RANGE DATA */ Float _VSepRatio_Min; // The ratio is computed with the bounding box Float _VSepRatio_Max; @@ -780,6 +1446,7 @@ namespace mymln /* IMPLICIT SEPARATOR DETECTION */ mymln::util::union_find<Label> implicit_separators_union; + mymln::util::union_find<Label> implicit_separators_union_right; }; } } diff --git a/scribo/sandbox/raphael/code/my/document/separator.hh b/scribo/sandbox/raphael/code/my/document/separator.hh index f5a32db..660bbed 100644 --- a/scribo/sandbox/raphael/code/my/document/separator.hh +++ b/scribo/sandbox/raphael/code/my/document/separator.hh @@ -11,10 +11,8 @@ namespace mymln namespace separators { template<typename L, typename F, typename D> - void separators_find_allign(mymln::document::document<L,F,D>& doc, std::string dgb_out, image2d<bool> s) + void separators_find_allign(mymln::document::document<L,F,D>& doc) { - image2d<value::rgb8> out; - mln::initialize(out, s); typedef vertex_image<point2d,bool> v_ima_g; typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; v_ima_g mask = doc.fun_mask_letters(); @@ -30,7 +28,7 @@ namespace mymln doc.jump_to_separator(v); if((!doc.contain_implicit_separator(v))) { - doc.add_to_separator(v); + doc.add_to_separator_left(v); doc.add_to_separator_self_link(v); } bool All_Alone = true; @@ -40,19 +38,17 @@ namespace mymln if((!doc.contain_implicit_separator(q))) { // draw::line(out, q,v, mln::literal::blue); - if(doc.allign_H_Large(q,v) && doc.allign_size(q, v)) + if(doc.allign_H_min(q,v) && doc.allign_size(q, v)) { doc.add_to_separator_link(v, q); - draw::line(out, q,v, mln::literal::magenta); All_Alone = false; } } else { - if(doc.allign_H_Large(q,v) && doc.allign_size(q, v)) + if(doc.allign_H_min(q,v) && doc.allign_size(q, v)) { doc.add_to_separator_link(q, v); - draw::line(out, q,v, mln::literal::green); All_Alone = false; } } @@ -63,9 +59,61 @@ namespace mymln } doc.propage_separator_link(); - io::ppm::save(mln::debug::superpose(out, s, literal::white),dgb_out); } + + template<typename L, typename F, typename D> + void separators_find_allign_right(mymln::document::document<L,F,D>& doc) + { + typedef vertex_image<point2d,bool> v_ima_g; + typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; + v_ima_g mask = doc.fun_mask_letters(); + mln_piter_(v_ima_g) v(mask.domain()); + typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t; + nbh_t nbh(mask); + mln_niter_(nbh_t) q(nbh, v); + for_all(v) + { + + if(doc.contain_letter(v)) + { + doc.jump_to_separator(v); + if((!doc.contain_implicit_separator(v))) + { + doc.add_to_separator_right(v); + doc.add_to_separator_self_link(v); + } + bool All_Alone = true; + for_all(q) + { + + if((!doc.contain_implicit_separator(q))) + { + // draw::line(out, q,v, mln::literal::blue); + if(doc.allign_H_max(q,v) && doc.allign_size(q, v)) + { + doc.add_to_separator_link(v, q); + All_Alone = false; + } + } + else + { + if(doc.allign_H_max(q,v) && doc.allign_size(q, v)) + { + doc.add_to_separator_link(q, v); + All_Alone = false; + } + } + } + if(All_Alone){doc.invalidate_implicit_separator(v);} + + } + + } + doc.propage_separator_link(); + } + + template<typename L, typename F, typename D> void separators_make_clean(mymln::document::document<L,F,D>& doc) { @@ -109,10 +157,60 @@ namespace mymln } for(unsigned int N = 0; N < doc.size();N++) { - if(count[N] > 1) + if(count[N] > 0) doc.invalidate_implicit_separator(N); } } + + + template<typename L, typename F, typename D> + void separators_final_clean(mymln::document::document<L,F,D>& doc) + { + + typedef vertex_image<point2d,bool> v_ima_g; + typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; + v_ima_g mask = doc.fun_mask_letters(); + mln_piter_(v_ima_g) v(mask.domain()); + typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t; + nbh_t nbh(mask); + mln_niter_(nbh_t) q(nbh, v); + mln::util::array<unsigned> count = mln::util::array<unsigned>(doc.size()); + count.fill(0); + for_all(v) + { + + if(doc.contain_implicit_separator(v)) + { + bool All_Alone = true; + doc.jump_to_line(v); + if((!doc.contain_line(v))) + { + doc.add_to_line(v); + doc.add_to_line_self_link(v); + } + + for_all(q) + { + + if(doc.contain_implicit_separator(q) && doc.same_implicit_separator(q,v)) + { + // draw::line(out, q,v, mln::literal::blue); + if(doc.allign_V(q,v) && doc.allign_size(q, v)) + { + count[doc[q]]++; + } + } + + } + } + } + for(unsigned int N = 0; N < doc.size();N++) + { + if(count[N] > 0) + doc.invalidate_implicit_separator(N); + } + } + } } } diff --git a/scribo/sandbox/raphael/code/my/util/union.hh b/scribo/sandbox/raphael/code/my/util/union.hh index 7f21e87..53fcbb3 100644 --- a/scribo/sandbox/raphael/code/my/util/union.hh +++ b/scribo/sandbox/raphael/code/my/util/union.hh @@ -18,9 +18,19 @@ namespace mymln mark_link.fill(0); size_ = max_size; } - + inline void reset() + { + mark.fill(0); + mark_link.fill(0); + } + inline bool is_self_link(const Label A) + {return mark_link[A] == A;} + inline void invalidate_link(const Label A) + { mark_link[A] = 0; } inline void add_self_link(const Label A) { mark_link[A] = A; } + inline unsigned int link(const unsigned int index) + {return mark_link[index]; } inline void add_link(const Label A, const Label B) { diff --git a/scribo/sandbox/raphael/code/test.cc b/scribo/sandbox/raphael/code/test.cc index b33a4eb..b009c2e 100644 --- a/scribo/sandbox/raphael/code/test.cc +++ b/scribo/sandbox/raphael/code/test.cc @@ -12,7 +12,6 @@ #include <mln/core/var.hh> #include <mln/accu/shape/bbox.hh> #include <mln/fun/i2v/array.hh> -#include <mln/fun/p2b/all.hh> #include <mln/util/graph.hh> #include <mln/util/timer.hh> #include <mln/debug/draw_graph.hh> @@ -40,6 +39,7 @@ #include <my/util/vector_bbox.hh> #include <my/util/vector_bbox_group.hh> #include <my/document/document.hh> +#include <my/document/separator.hh> #include <my/document/clean.hh> using namespace mln; @@ -114,24 +114,53 @@ void Process(std::string File, std::string Dir) } //mymln::debug::save_label_image(ima_influ, "influ_" + File); + mymln::document::clean_containers_items(doc); mymln::document::clean_letters_items(doc); - mymln::document::clean_get_lines(doc, Dir + "/" + "line_graph_" + File, doc.image_mask_letters()); - mymln::document::clean_dot_items(doc, Dir + "/" + "dot_graph_" + File, doc.image_mask_letters()); + mymln::document::clean_get_lines(doc); + mymln::document::clean_letters_alone(doc); + mymln::document::clean_dot_items(doc); doc.cook_lines(); mymln::document::clean_quote_items(doc, Dir + "/" + "quote_graph_" + File, doc.image_mask_letters()); - - doc.stat(); + + + mymln::document::separators::separators_find_allign(doc); + mymln::document::separators::separators_make_clean(doc); + doc.cook_separators(); + doc.cook_line_splitting(); + mymln::document::clean_line_link_item(doc); + mymln::document::clean_proximity_lines(doc); + mymln::document::clean_quote_lines(doc); + + doc.reset_implicit_separators(); + mymln::document::separators::separators_find_allign_right(doc); + mymln::document::separators::separators_make_clean(doc); + doc.cook_separators_right(); + doc.cook_line_splitting_exclusive(); + mymln::document::clean_line_link_item(doc); + mymln::document::clean_proximity_lines(doc); + mymln::document::clean_quote_lines(doc); + + + doc.recook_lines(); + + mymln::document::clean_paragraph_items(doc, Dir + "/" + "para_graph_" + File, doc.image_mask_letters()); + std::cout << "WORK ON GRAPH : " << timer.stop() << endl; //io::ppm::save(ima_influ, "separator.ppm"); //io::pbm::save(doc.image_mask_separators(),"separators"); - io::pbm::save(doc.image_mask_letters(),Dir + "/" + "letters_" + File); - io::pbm::save(doc.image_mask_alone_letters(),Dir + "/" + "letters_alone_" + File); - io::pbm::save(doc.image_mask_separators(),Dir + "/" + "separators_" + File); - io::pbm::save(doc.image_mask_containers(),Dir + "/" + "containers_" + File); - io::pbm::save(doc.image_mask_noise(),Dir + "/" + "noise_" + File); - io::pbm::save(doc.image_mask_start_lines(), Dir + "/" + "start_line_" + File); - doc.debug_save_lines(Dir + "/" + "lines_" + File); + // io::pbm::save(doc.image_mask_letters(),Dir + "/" + "letters_" + File); + //io::pbm::save(doc.image_mask_alone_letters(),Dir + "/" + "letters_alone_" + File); + //io::pbm::save(doc.image_mask_separators(),Dir + "/" + "separators_" + File); + //io::pbm::save(doc.image_mask_containers(),Dir + "/" + "containers_" + File); + //io::pbm::save(doc.image_mask_noise(),Dir + "/" + "noise_" + File); + + + + doc.debug_save_paragraphs(Dir + "/" + "lines_" + File); + //mymln::debug::save_graph_image(doc.fun_mask_implicit_separators_left(), doc.image_mask_letters(), Dir + "/" + "graph_imp_sep_line_" + File); + //doc.debug_save_separators(Dir + "/" + "imp_sep_graph_" + File); + /* typedef vertex_image<point2d,bool> v_ima_g; v_ima_g mask = doc.fun_mask_letters(); */ @@ -170,8 +199,8 @@ void Process(std::string File, std::string Dir) // mymln::debug::save_graph_image(doc.fun_mask_separators(), ima, "separator_graph_" + File); //mymln::debug::save_graph_image(area_grph, doc.image_mask_letters(), Dir + "/" + "graph_" + File); //mymln::debug::save_graph_image(doc.fun_mask_letters(), doc.image_mask_letters(), Dir + "/" + "container_graph_" + File); - //mymln::debug::save_graph_image(doc.fun_mask_end_lines(), doc.image_mask_letters(), Dir + "/" + "graph_start_line_" + File); - //mymln::debug::save_boxes_image(doc.bbox_mask_letters(), ima, "lbox_" + File); +mln::util::array<box2d> linebx = doc.bbox_mask_lines(); + mymln::debug::save_boxes_image(linebx, doc.image_mask_letters(), Dir + "/" + "lbox_" + File); //mymln::debug::save_boxes_image(doc.bbox_enlarge_mask_letters(10, 0), ima, "linebox_" + File); } -- 1.7.2.5
13 years, 3 months
1
0
0
0
last-svn-commit-883-gb303289 Add union find class. Increase the quality of the letter detection.
by Raphael Boissel
--- scribo/sandbox/raphael/code/my/debug/pict.hh | 15 ++ scribo/sandbox/raphael/code/my/document/clean.hh | 35 +++- .../sandbox/raphael/code/my/document/document.hh | 188 ++++++++++---------- .../raphael/code/my/document/filter/filter.hh | 182 +++++++++++++++++++ .../sandbox/raphael/code/my/document/separator.hh | 79 +++++++-- scribo/sandbox/raphael/code/my/util/union.hh | 86 +++++++++ 6 files changed, 474 insertions(+), 111 deletions(-) create mode 100644 scribo/sandbox/raphael/code/my/document/filter/filter.hh create mode 100644 scribo/sandbox/raphael/code/my/util/union.hh diff --git a/scribo/sandbox/raphael/code/my/debug/pict.hh b/scribo/sandbox/raphael/code/my/debug/pict.hh index 1597d53..56fdca3 100644 --- a/scribo/sandbox/raphael/code/my/debug/pict.hh +++ b/scribo/sandbox/raphael/code/my/debug/pict.hh @@ -3,6 +3,7 @@ #include <mln/util/graph.hh> #include <mln/debug/superpose.hh> +#include <my/util/union.hh> using namespace mln; using namespace std; namespace mymln @@ -26,6 +27,20 @@ namespace mymln image2d<value::rgb8> ima_color = labeling::colorize(value::rgb8(), ima); io::ppm::save(ima_color, file); } + + template<typename I1, typename I2> inline void save_label_image(image2d<I1> ima, mymln::util::union_find<I2> trans, std::string file) + { + mln_piter(image2d<I1>) p(ima.domain()); + p.start(); + while(p.is_valid()) + { + ima(p) = trans[ima(p)]; + p.next(); + } + image2d<value::rgb8> ima_color = labeling::colorize(value::rgb8(), ima); + io::ppm::save(ima_color, file); + } + template<typename p_v> inline void save_graph_image(p_v& pv, unsigned int SizeX, unsigned int SizeY, std::string file) { image2d<value::rgb8> ima_graph(SizeY, SizeX); diff --git a/scribo/sandbox/raphael/code/my/document/clean.hh b/scribo/sandbox/raphael/code/my/document/clean.hh index 9028e63..2ce8614 100644 --- a/scribo/sandbox/raphael/code/my/document/clean.hh +++ b/scribo/sandbox/raphael/code/my/document/clean.hh @@ -12,31 +12,52 @@ namespace mymln template<typename L, typename F, typename D> void clean_containers_items(mymln::document::document<L,F,D>& doc) { + typedef vertex_image<point2d,bool> v_ima_g; typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; - v_ima_g mask = doc.fun_mask_containers(); + v_ima_g mask = doc.fun_mask_letters(); mln_piter_(v_ima_g) v(mask.domain()); typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t; nbh_t nbh(mask); mln_niter_(nbh_t) q(nbh, v); + mln::util::array<unsigned> count = mln::util::array<unsigned>(doc.size()); + mln::util::array<bool> inside = mln::util::array<bool>(doc.size()); + count.fill(0); + inside.fill(false); for_all(v) { + unsigned link = 0; for_all(q) - { - if(!doc.contain_container(v) && doc.get_bbox(q).has(v)) + { + if(doc.contain_container(v) && doc.get_bbox(v).has(q)) + { + + inside[doc[q]] = true; + link++; + } + else if(doc.contain_letter(v)) { - doc.add_noise(v); + count[doc[q]]++; } + - } + } + } + for(unsigned int N = 0; N < doc.size();N++) + { + if(inside[N]) + if(count[N] < 3) + doc.add_noise(N); } + } template<typename L, typename F, typename D> void clean_letters_items(mymln::document::document<L,F,D>& doc) { + typedef vertex_image<point2d,bool> v_ima_g; typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; v_ima_g mask = doc.fun_mask_letters(); @@ -63,7 +84,7 @@ namespace mymln template<typename L, typename F, typename D> void clean_get_lines(mymln::document::document<L,F,D>& doc, std::string dgb_out,image2d<bool> s) - { + { image2d<value::rgb8> out; mln::initialize(out, s); typedef vertex_image<point2d,bool> v_ima_g; @@ -212,7 +233,7 @@ namespace mymln draw::line(out, q,v, mln::literal::magenta); } } - else if (doc.allign_H_Large(q, v) && doc.allign_up_line(v, q)) + else if (doc.allign_H_Large(q, v) && doc.allign_top(v, q)) { doc.add_to_line_link(v, q); draw::line(out, q,v, mln::literal::blue); diff --git a/scribo/sandbox/raphael/code/my/document/document.hh b/scribo/sandbox/raphael/code/my/document/document.hh index 4e13103..67bda18 100644 --- a/scribo/sandbox/raphael/code/my/document/document.hh +++ b/scribo/sandbox/raphael/code/my/document/document.hh @@ -1,7 +1,10 @@ #ifndef INC_DOCUMENT_DOC #define INC_DOCUMENT_DOC #include<my/util/vector_bbox_group.hh> +#include<my/util/union.hh> #include <mln/util/graph.hh> + + using namespace mln; namespace mymln { @@ -48,11 +51,10 @@ namespace mymln Vseparator_mask = fun::i2v::array<bool>(Areas + 1); noise_mask = fun::i2v::array<bool>(Areas + 1); alone_letters_mask = fun::i2v::array<bool>(Areas + 1); - - lines_mark = mln::util::array<unsigned int>(Areas + 1); - lines_mark_link = mln::util::array<unsigned int>(Areas + 1); - lines_mark.fill(0); - lines_mark_link.fill(0); + CImpSep = 1; + NImpSep = 2; + lines_union = mymln::util::union_find<Label>(Areas + 1); + implicit_separators_union = mymln::util::union_find<Label>(Areas + 1); img_influ = ima_influ; CSep = 0; CSepH = 0; @@ -65,9 +67,7 @@ namespace mymln } /* OPERATION ON LINES */ inline void add_to_line_self_link(const point2d& point) - { - add_to_line_self_link(img_influ(point)); - } + { add_to_line_self_link(img_influ(point));} inline void add_to_line(const point2d& point) { add_to_line(img_influ(point)); } @@ -77,7 +77,7 @@ namespace mymln inline bool same_line(const point2d& A, const point2d& B) { return same_line(img_influ(A), img_influ(B)); } inline bool same_line(const Label A, const Label B) - { return lines_mark[A] == lines_mark[B]; } + { return lines_union[A] == lines_union[B]; } inline void add_new_line(const point2d& point) { add_new_line(img_influ(point)); } @@ -88,74 +88,33 @@ namespace mymln { return contain_line(img_influ(point)); } inline void add_to_line(const Label lbl) - { lines_mark[lbl] = CLine; } + { lines_union[lbl] = CLine; } inline void add_new_line(const Label lbl) { CLine = NLine; NLine++; } + inline void add_to_line_self_link(const Label A) - { - lines_mark_link[A] = A; - } + {lines_union.add_self_link(A);} + inline void add_to_line_link(const Label A, const Label B) - { - - unsigned int Pos = find_line_parent(A); - if(lines_mark_link[B] == 0) - { - if(Pos != B) - { - if(Pos != 0) - { - lines_mark_link[B] = Pos; - lines_mark_link[A] = Pos; - } - else - { - lines_mark_link[A] = B; - } - } - } - else - { - unsigned int PosB = find_line_parent(B); - if(PosB == Pos) - { - lines_mark_link[B] = Pos; - lines_mark_link[A] = Pos; - } - else - { - lines_mark_link[B] = Pos; - lines_mark_link[PosB] = Pos; - } - } - - - - } - inline unsigned int find_line_parent(const Label A) - { - unsigned int Pos = A; - while(Pos != lines_mark_link[Pos] && Pos != 0){Pos = lines_mark_link[Pos];} - return Pos; - } + {lines_union.add_link(A, B);} inline void jump_to_line(const Label lbl) { - if(lines_mark[lbl] != 0) - CLine = lines_mark[lbl]; + if(lines_union[lbl] != 0) + CLine = lines_union[lbl]; else add_new_line(lbl); } inline bool contain_line(const Label lbl) - { return lines_mark[lbl] != 0;} + { return lines_union[lbl] != 0;} - /* LABELS MUST ALLWAYS BE SORTED */ inline void add_noise(const point2d& point) {add_noise(img_influ(point));} + inline unsigned int size(){return Areas_Number_;} void add_noise(Label lbl) @@ -463,7 +422,9 @@ namespace mymln } void debug_save_lines(std::string file) - { mymln::debug::save_label_image(img, lines_mark , file);} + { mymln::debug::save_label_image(img, lines_union , file);} + void debug_save_separators(std::string file) + { mymln::debug::save_label_image(img, implicit_separators_union , file);} vertex_image<point2d,bool> fun_mask_separators() { return fun_mask_(separators_mask); } vertex_image<point2d,bool> fun_mask_containers() @@ -525,27 +486,27 @@ namespace mymln { return get_line_length(img_influ(point)); } unsigned int get_line_length(Label L) - { return lines_len[lines_mark[L]]; } + { return lines_len[lines_union[L]]; } unsigned int get_beginning_of_line(point2d point) { return get_beginning_of_line(img_influ(point)); } unsigned int get_beginning_of_line(Label L) - { return lines_first_label[lines_mark[L]]; } + { return lines_first_label[lines_union[L]]; } unsigned int get_end_of_line(point2d point) { return get_end_of_line(img_influ(point)); } unsigned int get_end_of_line(Label L) - { return lines_last_label[lines_mark[L]]; } + { return lines_last_label[lines_union[L]]; } unsigned int get_parent_line(point2d point) - { return lines_mark[img_influ(point)]; } + { return lines_union[img_influ(point)]; } unsigned int get_parent_line(Label L) - { return lines_mark[L]; } + { return lines_union[L]; } inline void recook_lines() @@ -569,20 +530,68 @@ namespace mymln cook_lines_(); } inline void propage_line_link() - { - for(unsigned int N = 1; N < lines_mark_link.size(); N++) - { - unsigned int Pos = N; - while(Pos != lines_mark_link[Pos] && Pos != 0){Pos = lines_mark_link[Pos]; } - lines_mark[N] = lines_mark[Pos]; - } - } + { lines_union.propage_links(); } /*image_if<image2d<Label> masked_image_letters() {return masked_image_(letters_mask); } image_if<image2d<Label> masked_image_separator() - {return masked_image_(letters_mask); }*/ + {return masked_image_(letters_mask); }*/ + + /* IMPLICIT SEPARATORS */ + inline void add_new_separator(const point2d& point) + { add_new_separator(img_influ(point));} + inline void add_new_separator(const Label lbl) + { CImpSep = NImpSep; NImpSep++; } + + inline void add_to_separator_self_link(const point2d& point) + { add_to_separator_self_link(img_influ(point));} + inline void add_to_separator_self_link(const Label A) + {implicit_separators_union.add_self_link(A);} + + inline void add_to_separator_link(const point2d& A, const point2d& B) + { add_to_separator_link(img_influ(A), img_influ(B));} + inline void add_to_separator_link(const Label A, const Label B) + {implicit_separators_union.add_link(A, B);} + + inline bool same_implicit_separator(const point2d& A, const point2d& B) + {return same_implicit_separator(img_influ(A), img_influ(B));} + inline bool same_implicit_separator(const Label A, const Label B) + {return implicit_separators_union[A] == implicit_separators_union[B];} + + inline void propage_separator_link() + { implicit_separators_union.propage_links(); } + + inline void jump_to_separator(const point2d& point) + { jump_to_separator(img_influ(point)); } + inline void jump_to_separator(const Label lbl) + { + if(implicit_separators_union[lbl] != 0) + CImpSep = implicit_separators_union[lbl]; + else + add_new_separator(lbl); + } + inline bool contain_implicit_separator(const point2d& point) + { return contain_implicit_separator(img_influ(point)); } + inline bool contain_implicit_separator(const Label lbl) + {return implicit_separators_union[lbl] != 0; } + + inline void add_to_separator(const point2d& point) + { add_to_separator(img_influ(point)); } + inline void add_to_separator(const Label lbl) + { implicit_separators_union[lbl] = CImpSep; } + + inline void invalidate_implicit_separator(const point2d& point) + { invalidate_implicit_separator(img_influ(point)); } + inline void invalidate_implicit_separator(Label lbl) + { implicit_separators_union[lbl] = 0; } + + inline Label& operator[](point2d i) + { return img_influ(i); } + + inline point2d& operator[](Label i) + { return _bboxgp[i].pcenter(); } private: + // PRIVATE DATA ON LINES mln::util::array<unsigned int> lines_len; mln::util::array<unsigned int> lines_first_label; @@ -595,22 +604,22 @@ namespace mymln inline void cook_lines_() { - for(unsigned int N = 1; N < lines_mark.size(); N++) + for(unsigned int N = 1; N < lines_union.size(); N++) { - if(lines_mark[N] != 0) + if(lines_union[N] != 0) { /* APPROXIMATE THE NUMBER OF CHAR IN THE LINE */ - lines_len[lines_mark[N]]++; + lines_len[lines_union[N]]++; /* COOK THE FIRST AND THE LAST LABEL OF THE LINE */ - if(lines_first_label[lines_mark[N]] == 0) - lines_first_label[lines_mark[N]] = N; - else if(_bboxgp[N].pcenter()[1] < _bboxgp[lines_first_label[lines_mark[N]]].pcenter()[1]) - lines_first_label[lines_mark[N]] = N; + if(lines_first_label[lines_union[N]] == 0) + lines_first_label[lines_union[N]] = N; + else if(_bboxgp[N].pcenter()[1] < _bboxgp[lines_first_label[lines_union[N]]].pcenter()[1]) + lines_first_label[lines_union[N]] = N; - if(lines_last_label[lines_mark[N]] == 0) - lines_last_label[lines_mark[N]] = N; - else if(_bboxgp[N].pcenter()[1] > _bboxgp[lines_last_label[lines_mark[N]]].pcenter()[1]) - lines_last_label[lines_mark[N]] = N; + if(lines_last_label[lines_union[N]] == 0) + lines_last_label[lines_union[N]] = N; + else if(_bboxgp[N].pcenter()[1] > _bboxgp[lines_last_label[lines_union[N]]].pcenter()[1]) + lines_last_label[lines_union[N]] = N; /* FILL THE MASK WITH FALSE:MAYBE USELESS IF THE MASK IS INITIALIZED */ start_lines_mask(N) = false; @@ -738,10 +747,10 @@ namespace mymln unsigned int CLine; unsigned int NLine; + unsigned int CImpSep; + unsigned int NImpSep; - - mln::util::array<unsigned int> lines_mark; - mln::util::array<unsigned int> lines_mark_link; + mymln::util::union_find<Label> lines_union; unsigned int CLet ; unsigned int CSep ; unsigned int CSepH ; @@ -770,8 +779,7 @@ namespace mymln Label Areas_Number_; /* IMPLICIT SEPARATOR DETECTION */ - mln::util::array<unsigned int> implicit_separator_mark; - mln::util::array<unsigned int> implicit_separator_mark_link; + mymln::util::union_find<Label> implicit_separators_union; }; } } diff --git a/scribo/sandbox/raphael/code/my/document/filter/filter.hh b/scribo/sandbox/raphael/code/my/document/filter/filter.hh new file mode 100644 index 0000000..c3a294c --- /dev/null +++ b/scribo/sandbox/raphael/code/my/document/filter/filter.hh @@ -0,0 +1,182 @@ +#ifndef INC_DOCUMENT_FILTER_GENERIC +#define INC_DOCUMENT_FILTER_GENERIC +namespace mymln +{ + namespace document + { + namespace filter + { + template<typename L, typename F, typename D, typename Left, typename Right> + class filter + { + public: + filter(){} + filter(document<L,F,D>& doc){ doc_ = doc; } + filter(document<L,F,D>& doc, vertex_image<point2d,bool> mask){ doc_ = doc; mask_ = mask; } + inline bool link_test(point2d& A, point2d& B){ return true; } + inline bool vertex_test(point2d& A){ return true; } + inline bool gen_link_test(point2d& A, point2d& B) + { + return link_test(A, B); + } + inline bool gen_vertex_test(point2d& A) + { + return vertex_test(A); + } + inline void iter_dgb(std::string dgb_out, image2d<bool> s) + { + image2d<value::rgb8> out; + mln::initialize(out, s); + typedef vertex_image<point2d,bool> v_ima_g; + typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; + mln_piter_(v_ima_g) v(mask_.domain()); + typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t; + nbh_t nbh(mask_); + mln_niter_(nbh_t) q(nbh, v); + for_all(v) + { + if(gen_vertex_test(v)) + { + for_all(q) + { + if(gen_link_test(v, q)) + { + draw::line(out, q,v, mln::literal::green); + } + else + { + draw::line(out, q,v, mln::literal::magenta); + } + } + } + else + { + draw::line(out, q,v, mln::literal::magenta); + } + } + } + inline void iter() + { + typedef vertex_image<point2d,bool> v_ima_g; + typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; + mln_piter_(v_ima_g) v(mask_.domain()); + typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t; + nbh_t nbh(mask_); + mln_niter_(nbh_t) q(nbh, v); + for_all(v) + { + if(gen_vertex_test(v)) + { + for_all(q) + { + if(gen_link_test(v, q)) + { + + } + } + } + } + } + + inline filter& operator|(filter& B) + { + filter<L,F,D> PFilter = filter_or(doc_, mask_); + PFilter.sub_filter_A_ = this; + PFilter.sub_filter_B_ = B; + B.doc_ = doc_; + B.mask_ = mask_; + return PFilter; + } + + inline filter& operator&(filter& B) + { + filter<L,F,D> PFilter = filter_and(doc_, mask_); + PFilter.sub_filter_A_ = this; + PFilter.sub_filter_B_ = B; + B.doc_ = doc_; + B.mask_ = mask_; + return PFilter; + } + + protected: + Left sub_filter_A_; + Right sub_filter_B_; + + document<L,F,D> doc_; + vertex_image<point2d,bool> mask_; + + + + }; + + + + + + + + + + + template<typename L, typename F, typename D> + class filter_or : filter<L,F,D> + { + public: + inline bool gen_link_test(point2d& A, point2d& B) + { + return sub_filter_A_.gen_link_test(A, B) || sub_filter_B_.gen_link_test(A, B); + } + inline bool gen_vertex_test(point2d& A) + { + return sub_filter_A_.gen_vertex_test(A) || sub_filter_B_.gen_vertex_test(A); + } + + protected: + filter<L,F,D> sub_filter_A_; + filter<L,F,D> sub_filter_B_; + + document<L,F,D> doc_; + vertex_image<point2d,bool> mask_; + }; + + template<typename L, typename F, typename D> + class filter_and : filter<L,F,D> + { + public: + inline bool gen_link_test(point2d& A, point2d& B) + { + return sub_filter_A_.gen_link_test(A, B) || sub_filter_B_.gen_link_test(A, B); + } + inline bool gen_vertex_test(point2d& A) + { + return sub_filter_A_.gen_vertex_test(A) || sub_filter_B_.gen_vertex_test(A); + } + + protected: + filter<L,F,D> sub_filter_A_; + filter<L,F,D> sub_filter_B_; + + document<L,F,D> doc_; + vertex_image<point2d,bool> mask_; + }; + + template<typename L, typename F, typename D> + class filter_letter : filter<L,F,D> + { + public: + inline bool vertex_test(point2d& A){ return doc_.contain_letter(A); } + + protected: + filter<L,F,D> sub_filter_A_; + filter<L,F,D> sub_filter_B_; + + document<L,F,D> doc_; + vertex_image<point2d,bool> mask_; + }; + + + + } + } +} +#endif \ No newline at end of file diff --git a/scribo/sandbox/raphael/code/my/document/separator.hh b/scribo/sandbox/raphael/code/my/document/separator.hh index 756f04b..f5a32db 100644 --- a/scribo/sandbox/raphael/code/my/document/separator.hh +++ b/scribo/sandbox/raphael/code/my/document/separator.hh @@ -2,7 +2,7 @@ #define INC_DOCUMENT_SEPARATOR #include <my/util/vector_bbox_group.hh> #include <mln/util/graph.hh> -#include <mln/document/document.hh> +#include <my/document/document.hh> using namespace mln; namespace mymln { @@ -11,7 +11,7 @@ namespace mymln namespace separators { template<typename L, typename F, typename D> - void clean_containers_items(mymln::document::document<L,F,D>& doc, std::string dgb_out, image2d<bool> s) + void separators_find_allign(mymln::document::document<L,F,D>& doc, std::string dgb_out, image2d<bool> s) { image2d<value::rgb8> out; mln::initialize(out, s); @@ -27,42 +27,93 @@ namespace mymln if(doc.contain_letter(v)) { + doc.jump_to_separator(v); if((!doc.contain_implicit_separator(v))) { - doc.add_to_implicit_separator(v); - doc.add_to_implicit_separator_self_link(v); + doc.add_to_separator(v); + doc.add_to_separator_self_link(v); } - + bool All_Alone = true; for_all(q) { - if((!doc.contain_line(q))) + if((!doc.contain_implicit_separator(q))) { // draw::line(out, q,v, mln::literal::blue); - if(doc.allign_H(q,v) && doc.allign_size(q, v)) + if(doc.allign_H_Large(q,v) && doc.allign_size(q, v)) { - doc.add_to_implicit_separator_link(v, q); + doc.add_to_separator_link(v, q); draw::line(out, q,v, mln::literal::magenta); - All_Alone = false; + All_Alone = false; } } else { - if(doc.allign_V(q,v) && doc.allign_size(q, v)) + if(doc.allign_H_Large(q,v) && doc.allign_size(q, v)) { - doc.add_to_implicit_separator_link(q, v); + doc.add_to_separator_link(q, v); draw::line(out, q,v, mln::literal::green); - All_Alone = false; + All_Alone = false; } } } + if(All_Alone){doc.invalidate_implicit_separator(v);} } } - doc.propage_implicit_separator_link(); + doc.propage_separator_link(); io::ppm::save(mln::debug::superpose(out, s, literal::white),dgb_out); } + + template<typename L, typename F, typename D> + void separators_make_clean(mymln::document::document<L,F,D>& doc) + { + + typedef vertex_image<point2d,bool> v_ima_g; + typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; + v_ima_g mask = doc.fun_mask_letters(); + mln_piter_(v_ima_g) v(mask.domain()); + typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t; + nbh_t nbh(mask); + mln_niter_(nbh_t) q(nbh, v); + mln::util::array<unsigned> count = mln::util::array<unsigned>(doc.size()); + count.fill(0); + for_all(v) + { + + if(doc.contain_implicit_separator(v)) + { + bool All_Alone = true; + doc.jump_to_line(v); + if((!doc.contain_line(v))) + { + doc.add_to_line(v); + doc.add_to_line_self_link(v); + } + + for_all(q) + { + + if(doc.contain_implicit_separator(q) && doc.same_implicit_separator(q,v)) + { + // draw::line(out, q,v, mln::literal::blue); + if(doc.allign_V(q,v) && doc.allign_size(q, v)) + { + count[doc[q]]++; + } + } + + } + } + } + for(unsigned int N = 0; N < doc.size();N++) + { + if(count[N] > 1) + doc.invalidate_implicit_separator(N); + } + } } } -} \ No newline at end of file +} +#endif \ No newline at end of file diff --git a/scribo/sandbox/raphael/code/my/util/union.hh b/scribo/sandbox/raphael/code/my/util/union.hh new file mode 100644 index 0000000..7f21e87 --- /dev/null +++ b/scribo/sandbox/raphael/code/my/util/union.hh @@ -0,0 +1,86 @@ +#ifndef INC_DOCUMENT_UNION +#define INC_DOCUMENT_UNION +namespace mymln +{ + namespace util + { + template<typename Label> + class union_find + { + public : + union_find() + {size_ = 0;} + union_find(const unsigned int max_size) + { + mark = mln::util::array<unsigned int>(max_size); + mark_link = mln::util::array<unsigned int>(max_size); + mark.fill(0); + mark_link.fill(0); + size_ = max_size; + } + + inline void add_self_link(const Label A) + { mark_link[A] = A; } + inline void add_link(const Label A, const Label B) + { + + unsigned int Pos = find_parent_(A); + if(mark_link[B] == 0) + { + if(Pos != B) + { + if(Pos != 0) + { + mark_link[B] = Pos; + mark_link[A] = Pos; + } + else + { + mark_link[A] = B; + } + } + } + else + { + unsigned int PosB = find_parent_(B); + if(PosB == Pos) + { + mark_link[B] = Pos; + mark_link[A] = Pos; + } + else + { + mark_link[B] = Pos; + mark_link[PosB] = Pos; + } + } + } + inline void propage_links() + { + for(unsigned int N = 1; N < size_; N++) + { + unsigned int Pos = N; + while(Pos != mark_link[Pos] && Pos != 0){Pos = mark_link[Pos]; } + mark[N] = mark[Pos]; + } + } + inline unsigned int size() + {return size_; } + inline unsigned int& operator[](unsigned int i) + { + return mark[i]; + } + private : + inline unsigned int find_parent_(const Label A) + { + unsigned int Pos = A; + while(Pos != mark_link[Pos] && Pos != 0){Pos = mark_link[Pos];} + return Pos; + } + mln::util::array<unsigned int> mark; + mln::util::array<unsigned int> mark_link; + unsigned int size_; + }; + } +} +#endif \ No newline at end of file -- 1.7.2.5
13 years, 3 months
1
0
0
0
last-svn-commit-882-gc2df1b3 update line recognition system. still have problem with document 228
by Raphael Boissel
--- scribo/sandbox/raphael/code/my/document/clean.hh | 95 ++++++++- .../sandbox/raphael/code/my/document/document.hh | 209 ++++++++++++++++++-- .../sandbox/raphael/code/my/document/separator.hh | 68 +++++++ scribo/sandbox/raphael/code/test.cc | 13 +- scribo/sandbox/raphael/code/test.ppm | Bin 27000122 -> 0 bytes 5 files changed, 357 insertions(+), 28 deletions(-) create mode 100644 scribo/sandbox/raphael/code/my/document/separator.hh delete mode 100644 scribo/sandbox/raphael/code/test.ppm diff --git a/scribo/sandbox/raphael/code/my/document/clean.hh b/scribo/sandbox/raphael/code/my/document/clean.hh index 335a575..9028e63 100644 --- a/scribo/sandbox/raphael/code/my/document/clean.hh +++ b/scribo/sandbox/raphael/code/my/document/clean.hh @@ -25,11 +25,15 @@ namespace mymln for_all(q) { if(!doc.contain_container(v) && doc.get_bbox(q).has(v)) + { doc.add_noise(v); + } + } } } + template<typename L, typename F, typename D> void clean_letters_items(mymln::document::document<L,F,D>& doc) { @@ -88,7 +92,7 @@ namespace mymln if((!doc.contain_line(q))) { // draw::line(out, q,v, mln::literal::blue); - if((doc.allign_V(q,v))) + if(doc.allign_V(q,v) && doc.allign_size(q, v)) { doc.add_to_line_link(v, q); draw::line(out, q,v, mln::literal::magenta); @@ -97,7 +101,7 @@ namespace mymln } else { - if(doc.allign_V(q,v)) + if(doc.allign_V(q,v) && doc.allign_size(q, v)) { doc.add_to_line_link(q, v); draw::line(out, q,v, mln::literal::green); @@ -112,11 +116,10 @@ namespace mymln } } - doc.cook_lines(); + doc.propage_line_link(); io::ppm::save(mln::debug::superpose(out, s, literal::white),dgb_out); } - - + template<typename L, typename F, typename D> void clean_dot_items(mymln::document::document<L,F,D>& doc, std::string dgb_out,image2d<bool> s) { @@ -141,19 +144,91 @@ namespace mymln doc.add_to_line_link(v, q); doc.add_letter_coerce(q); } - else if (doc.allign_H_Large(v, q) && doc.allign_top(v, q)) + } + } + } + mask = doc.fun_mask_alone_letters(); + mln_piter_(v_ima_g) v2(mask.domain()); + nbh = nbh_t(mask); + mln_niter_(nbh_t) q2(nbh, v2); + for_all(v2) + { + if(doc.contain_line(v2)) + { + for_all(q2) + { + if (doc.allign_H_Large(v2, q2) && doc.allign_top(v2, q2)) { - draw::line(out, q,v, mln::literal::magenta); - doc.add_to_line_link(v, q); - doc.add_letter_coerce(q); + draw::line(out, q2,v2, mln::literal::magenta); + doc.add_to_line_link(v2, q2); + doc.add_letter_coerce(q2); + } + } + } + } + io::ppm::save(mln::debug::superpose(out, s, literal::white),dgb_out); + doc.propage_line_link(); + } + + template<typename L, typename F, typename D> + void clean_quote_items(mymln::document::document<L,F,D>& doc, std::string dgb_out,image2d<bool> s) + { + + image2d<value::rgb8> out; + mln::initialize(out, s); + typedef vertex_image<point2d,bool> v_ima_g; + typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; + v_ima_g mask = doc.fun_mask_start_end_lines(); + mln_piter_(v_ima_g) v(mask.domain()); + typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t; + nbh_t nbh(mask); + mln_niter_(nbh_t) q(nbh, v); + for_all(v) + { + if(doc.contain_line(v)) + { + for_all(q) + { + if(doc.get_line_length(q) < 4) + { + if(doc.allign_size(v,q)) + { + if(!doc.contain_alone_letter(v) && !doc.contain_alone_letter(q) ) + { + if( + (doc.allign_top(v, q) || doc.allign_top(doc.get_beginning_of_line(v), doc.get_label(q))) + ) + { + doc.add_to_line_link(v, q); + draw::line(out, q,v, mln::literal::green); + } + } + else if(doc.allign_top(v, q) && !doc.allign_H(v, q)) + { + doc.add_to_line_link(v, q); + } + else + { + draw::line(out, q,v, mln::literal::magenta); + } + } + else if (doc.allign_H_Large(q, v) && doc.allign_up_line(v, q)) + { + doc.add_to_line_link(v, q); + draw::line(out, q,v, mln::literal::blue); + } } + } } } io::ppm::save(mln::debug::superpose(out, s, literal::white),dgb_out); - doc.cook_lines(); + doc.propage_line_link(); + doc.recook_lines(); } + + } diff --git a/scribo/sandbox/raphael/code/my/document/document.hh b/scribo/sandbox/raphael/code/my/document/document.hh index 1bd44ac..4e13103 100644 --- a/scribo/sandbox/raphael/code/my/document/document.hh +++ b/scribo/sandbox/raphael/code/my/document/document.hh @@ -33,6 +33,9 @@ namespace mymln // NOTE : The type Float is used toperform floating point operation on data // with type Label. So a conversion betweem Data and Float must exist. + + // WARNING: Methods on lines like get_end_of_line can be used only after a line cooking. + document(image2d<Label>& ima, image2d<Label>& ima_influ,mln::util::array<box2d>& bboxgp, g_vertices_p& area_graph, Label Areas) { img = ima; @@ -57,6 +60,7 @@ namespace mymln CLet = 0; CLine = 1; NLine = 2; + Areas_Number_ = Areas + 1; } /* OPERATION ON LINES */ @@ -158,6 +162,7 @@ namespace mymln { separators_mask(lbl) = false; letters_mask(lbl) = false; + alone_letters_mask(lbl) = false; containers_mask(lbl) = false; Hseparator_mask(lbl) = false; Vseparator_mask(lbl) = false; @@ -336,6 +341,16 @@ namespace mymln return allignV < label_size_(0, Left) && (_bboxgp[Left].pcenter()[0]) > (_bboxgp[Right].pcenter()[0]); } + + inline bool allign_up_line( const point2d& Left, const point2d& Right) + {return allign_up_line(img_influ(Left), img_influ(Right));} + + inline bool allign_up_line( const Label Left, const Label Right) + { + short int allignV = label_allign_(0, Left, Right) * 1.3f; + return allignV < label_size_(0, Left) && (_bboxgp[Left].pcenter()[0]) > (_bboxgp[Right].pcenter()[0]); + } + inline bool allign_H_Large( const point2d& Left, const point2d& Right) {return allign_H_Large(img_influ(Left), img_influ(Right));} @@ -350,9 +365,48 @@ namespace mymln inline bool allign_H( const Label Left, const Label Right) { - short int allignV = label_allign_(1, Left, Right) * 2; - return allignV < label_size_(1, Left) && allignV < label_size_(1, Right); + short int allignH = label_allign_(1, Left, Right) * 2; + return allignH < label_size_(1, Left) && allignH < label_size_(1, Right); + } + + inline bool allign_size_height( const point2d& Left, const point2d& Right) + {return allign_size_height(img_influ(Left), img_influ(Right));} + + inline bool allign_size_height( const Label Left, const Label Right) + { + short int SizeL = label_size_(0, Left); + short int SizeR = label_size_(0, Right); + return SizeR > (SizeL / 3) && SizeR < (SizeL * 3); + } + + inline bool allign_size( const point2d& Left, const point2d& Right) + {return allign_size(img_influ(Left), img_influ(Right));} + + inline bool allign_size( const Label Left, const Label Right) + { + short int SizeL0 = label_size_(0, Left); + short int SizeR0 = label_size_(0, Right); + short int SizeL1 = label_size_(1, Left); + short int SizeR1 = label_size_(1, Right); + short int Swap = 0; + if(SizeL0 < SizeL1) + { SizeL0 = SizeL1; } + if(SizeR0 < SizeR1){SizeR0 = SizeR1;} + return SizeR0 > (SizeL0 / 4) && SizeR0 < (SizeL0 * 4); + } + + + inline bool allign_size_height_max( const point2d& Left, const point2d& Right) + {return allign_size_height_max(img_influ(Left), img_influ(Right));} + + inline bool allign_size_height_max( const Label Left, const Label Right) + { + short int SizeL = label_size_(0, Left); + short int SizeR = label_size_(0, Right); + return SizeR < (SizeL * 3); } + + inline bool allign_V( const point2d& Left, const point2d& Right) {return allign_V(img_influ(Left), img_influ(Right));} @@ -361,6 +415,26 @@ namespace mymln short int allignV = label_allign_(0, Left, Right) * 2; return allignV < label_size_(0, Left) && allignV < label_size_(0, Right); } + inline bool allign_V_large( const point2d& Left, const point2d& Right) + {return allign_V_large(img_influ(Left), img_influ(Right));} + + inline bool allign_V_large( const Label Left, const Label Right) + { + short int allignV = label_allign_(0, Left, Right); + return allignV < label_size_(0, Left) && allignV < label_size_(0, Right); + } + + + inline bool allign_V_extra_large( const point2d& Left, const point2d& Right) + {return allign_V_extra_large(img_influ(Left), img_influ(Right));} + + inline bool allign_V_extra_large( const Label Left, const Label Right) + { + short int allignV = label_allign_(0, Left, Right) / 2; + return allignV < label_size_(0, Left) && allignV < label_size_(0, Right); + } + + inline bool allign_base_line(const point2d& Left, const point2d& Right) {return allign_base_line(img_influ(Left), img_influ(Right));} inline bool allign_base_line(const Label Left, const Label Right) @@ -404,6 +478,13 @@ namespace mymln } vertex_image<point2d,bool> fun_mask_letters() { return fun_mask_(letters_mask); } + vertex_image<point2d,bool> fun_mask_start_lines() + { return fun_mask_(start_lines_mask); } + vertex_image<point2d,bool> fun_mask_end_lines() + { return fun_mask_(end_lines_mask); } + vertex_image<point2d,bool> fun_mask_start_end_lines() + { return fun_mask_(start_end_lines_mask); } + image2d<bool> image_mask_containers() { return image_mask_(containers_mask); } image2d<bool> image_mask_separators() @@ -414,6 +495,10 @@ namespace mymln { return image_mask_(noise_mask); } image2d<bool> image_mask_alone_letters() { return image_mask_(alone_letters_mask); } + image2d<bool> image_mask_start_lines() + { return image_mask_(start_lines_mask); } + image2d<bool> image_mask_end_lines() + { return image_mask_(end_lines_mask); } mln::util::array<box2d> bbox_mask_containers() { return bbox_mask_(containers_mask); } @@ -433,33 +518,122 @@ namespace mymln mln::util::array<box2d> bbox_enlarge_mask_noise(short int x, short int y) { return bbox_mask_enlarge_(noise_mask, x, y); } + Label get_label(point2d point) + { return img_influ(point); } + + unsigned int get_line_length(point2d point) + { return get_line_length(img_influ(point)); } + + unsigned int get_line_length(Label L) + { return lines_len[lines_mark[L]]; } + + unsigned int get_beginning_of_line(point2d point) + { return get_beginning_of_line(img_influ(point)); } + + unsigned int get_beginning_of_line(Label L) + { return lines_first_label[lines_mark[L]]; } + + unsigned int get_end_of_line(point2d point) + { return get_end_of_line(img_influ(point)); } + + unsigned int get_end_of_line(Label L) + { return lines_last_label[lines_mark[L]]; } + + unsigned int get_parent_line(point2d point) { return lines_mark[img_influ(point)]; } + + unsigned int get_parent_line(Label L) { return lines_mark[L]; } - void cook_lines() + inline void recook_lines() { - propage_line_link(); + lines_first_label.fill(0); + lines_last_label.fill(0); + lines_len.fill(0); + cook_lines_(); + } + inline void cook_lines() + { + lines_len = mln::util::array<unsigned int>(CLine + 1); + lines_first_label = mln::util::array<unsigned int>(CLine + 1); + lines_last_label = mln::util::array<unsigned int>(CLine + 1); + start_lines_mask = fun::i2v::array<bool>(Areas_Number_); + end_lines_mask = fun::i2v::array<bool>(Areas_Number_); + start_end_lines_mask = fun::i2v::array<bool>(Areas_Number_); + lines_len.fill(0); + start_lines_mask(0) = false; + end_lines_mask(0) = false; + cook_lines_(); + } + inline void propage_line_link() + { + for(unsigned int N = 1; N < lines_mark_link.size(); N++) + { + unsigned int Pos = N; + while(Pos != lines_mark_link[Pos] && Pos != 0){Pos = lines_mark_link[Pos]; } + lines_mark[N] = lines_mark[Pos]; + } } - /*image_if<image2d<Label> masked_image_letters() {return masked_image_(letters_mask); } image_if<image2d<Label> masked_image_separator() {return masked_image_(letters_mask); }*/ private: - // PRIVATE FUNCTIONS ON LINES - inline void propage_line_link() - { - for(unsigned int N = 1; N < lines_mark_link.size(); N++) + // PRIVATE DATA ON LINES + mln::util::array<unsigned int> lines_len; + mln::util::array<unsigned int> lines_first_label; + mln::util::array<unsigned int> lines_last_label; + fun::i2v::array<bool> start_lines_mask; + fun::i2v::array<bool> end_lines_mask; + fun::i2v::array<bool> start_end_lines_mask; + + + + inline void cook_lines_() { - unsigned int Pos = N; - while(Pos != lines_mark_link[Pos] && Pos != 0){Pos = lines_mark_link[Pos]; } - lines_mark[N] = lines_mark[Pos]; + for(unsigned int N = 1; N < lines_mark.size(); N++) + { + if(lines_mark[N] != 0) + { + /* APPROXIMATE THE NUMBER OF CHAR IN THE LINE */ + lines_len[lines_mark[N]]++; + /* COOK THE FIRST AND THE LAST LABEL OF THE LINE */ + if(lines_first_label[lines_mark[N]] == 0) + lines_first_label[lines_mark[N]] = N; + else if(_bboxgp[N].pcenter()[1] < _bboxgp[lines_first_label[lines_mark[N]]].pcenter()[1]) + lines_first_label[lines_mark[N]] = N; + + if(lines_last_label[lines_mark[N]] == 0) + lines_last_label[lines_mark[N]] = N; + else if(_bboxgp[N].pcenter()[1] > _bboxgp[lines_last_label[lines_mark[N]]].pcenter()[1]) + lines_last_label[lines_mark[N]] = N; + + /* FILL THE MASK WITH FALSE:MAYBE USELESS IF THE MASK IS INITIALIZED */ + start_lines_mask(N) = false; + end_lines_mask(N) = false; + start_end_lines_mask(N) =false; + } + } + + + /* SECOND STEP OF THE COOKING */ + for(unsigned int N = 0; N < CLine + 1; N++) + { + if( lines_first_label[N] != 0) + { + start_lines_mask(lines_first_label[N]) = true; + end_lines_mask(lines_last_label[N]) = true; + start_end_lines_mask(lines_first_label[N]) = true; + start_end_lines_mask(lines_last_label[N]) = true; + } + } } - } + + // GENERIC CONTAIN TEST inline bool contain_(const Label& lbl, const fun::i2v::array<bool>& array) @@ -560,10 +734,12 @@ namespace mymln fun::i2v::array<bool> alone_letters_mask; fun::i2v::array<bool> containers_mask; fun::i2v::array<bool> noise_mask; + + unsigned int CLine; unsigned int NLine; - mln::util::array<Label> lines_start; + mln::util::array<unsigned int> lines_mark; mln::util::array<unsigned int> lines_mark_link; unsigned int CLet ; @@ -591,6 +767,11 @@ namespace mymln g_vertices_p _area_graph; mln::image2d<Label> img; mln::image2d<Label> img_influ; + Label Areas_Number_; + + /* IMPLICIT SEPARATOR DETECTION */ + mln::util::array<unsigned int> implicit_separator_mark; + mln::util::array<unsigned int> implicit_separator_mark_link; }; } } diff --git a/scribo/sandbox/raphael/code/my/document/separator.hh b/scribo/sandbox/raphael/code/my/document/separator.hh new file mode 100644 index 0000000..756f04b --- /dev/null +++ b/scribo/sandbox/raphael/code/my/document/separator.hh @@ -0,0 +1,68 @@ +#ifndef INC_DOCUMENT_SEPARATOR +#define INC_DOCUMENT_SEPARATOR +#include <my/util/vector_bbox_group.hh> +#include <mln/util/graph.hh> +#include <mln/document/document.hh> +using namespace mln; +namespace mymln +{ + namespace document + { + namespace separators + { + template<typename L, typename F, typename D> + void clean_containers_items(mymln::document::document<L,F,D>& doc, std::string dgb_out, image2d<bool> s) + { + image2d<value::rgb8> out; + mln::initialize(out, s); + typedef vertex_image<point2d,bool> v_ima_g; + typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; + v_ima_g mask = doc.fun_mask_letters(); + mln_piter_(v_ima_g) v(mask.domain()); + typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t; + nbh_t nbh(mask); + mln_niter_(nbh_t) q(nbh, v); + for_all(v) + { + + if(doc.contain_letter(v)) + { + if((!doc.contain_implicit_separator(v))) + { + doc.add_to_implicit_separator(v); + doc.add_to_implicit_separator_self_link(v); + } + + for_all(q) + { + + if((!doc.contain_line(q))) + { + // draw::line(out, q,v, mln::literal::blue); + if(doc.allign_H(q,v) && doc.allign_size(q, v)) + { + doc.add_to_implicit_separator_link(v, q); + draw::line(out, q,v, mln::literal::magenta); + All_Alone = false; + } + } + else + { + if(doc.allign_V(q,v) && doc.allign_size(q, v)) + { + doc.add_to_implicit_separator_link(q, v); + draw::line(out, q,v, mln::literal::green); + All_Alone = false; + } + } + } + + } + + } + doc.propage_implicit_separator_link(); + io::ppm::save(mln::debug::superpose(out, s, literal::white),dgb_out); + } + } + } +} \ No newline at end of file diff --git a/scribo/sandbox/raphael/code/test.cc b/scribo/sandbox/raphael/code/test.cc index 58edba0..b33a4eb 100644 --- a/scribo/sandbox/raphael/code/test.cc +++ b/scribo/sandbox/raphael/code/test.cc @@ -96,7 +96,7 @@ void Process(std::string File, std::string Dir) timer.restart(); mymln::document::document<uint16,float,short> doc(ima_blob, ima_influ, boxes, area_grph, areas_detected); - doc.vertical_separator_ratio_range(0.0f, 0.1f); + doc.vertical_separator_ratio_range(0.0f, 0.2f); doc.horizontal_separator_ratio_range(6.0f, 1000.0f); doc.container_volume_range(40, 100); for (uint16 N = 1; N <= areas_detected; N++) @@ -117,7 +117,10 @@ void Process(std::string File, std::string Dir) mymln::document::clean_containers_items(doc); mymln::document::clean_letters_items(doc); mymln::document::clean_get_lines(doc, Dir + "/" + "line_graph_" + File, doc.image_mask_letters()); - mymln::document::clean_dot_items(doc, Dir + "/" + "dot_graph_" + File, doc.image_mask_letters()); + mymln::document::clean_dot_items(doc, Dir + "/" + "dot_graph_" + File, doc.image_mask_letters()); + doc.cook_lines(); + mymln::document::clean_quote_items(doc, Dir + "/" + "quote_graph_" + File, doc.image_mask_letters()); + doc.stat(); std::cout << "WORK ON GRAPH : " << timer.stop() << endl; //io::ppm::save(ima_influ, "separator.ppm"); @@ -127,6 +130,7 @@ void Process(std::string File, std::string Dir) io::pbm::save(doc.image_mask_separators(),Dir + "/" + "separators_" + File); io::pbm::save(doc.image_mask_containers(),Dir + "/" + "containers_" + File); io::pbm::save(doc.image_mask_noise(),Dir + "/" + "noise_" + File); + io::pbm::save(doc.image_mask_start_lines(), Dir + "/" + "start_line_" + File); doc.debug_save_lines(Dir + "/" + "lines_" + File); /* typedef vertex_image<point2d,bool> v_ima_g; v_ima_g mask = doc.fun_mask_letters(); @@ -164,8 +168,9 @@ void Process(std::string File, std::string Dir) //std::cout << "NODES:" << fnds << endl; // mymln::debug::save_graph_image(area_grph, ima, "graph_" + File); // mymln::debug::save_graph_image(doc.fun_mask_separators(), ima, "separator_graph_" + File); - mymln::debug::save_graph_image(area_grph, doc.image_mask_letters(), Dir + "/" + "graph_" + File); - mymln::debug::save_graph_image(doc.fun_mask_letters(), doc.image_mask_letters(), Dir + "/" + "container_graph_" + File); + //mymln::debug::save_graph_image(area_grph, doc.image_mask_letters(), Dir + "/" + "graph_" + File); + //mymln::debug::save_graph_image(doc.fun_mask_letters(), doc.image_mask_letters(), Dir + "/" + "container_graph_" + File); + //mymln::debug::save_graph_image(doc.fun_mask_end_lines(), doc.image_mask_letters(), Dir + "/" + "graph_start_line_" + File); //mymln::debug::save_boxes_image(doc.bbox_mask_letters(), ima, "lbox_" + File); //mymln::debug::save_boxes_image(doc.bbox_enlarge_mask_letters(10, 0), ima, "linebox_" + File); } diff --git a/scribo/sandbox/raphael/code/test.ppm b/scribo/sandbox/raphael/code/test.ppm deleted file mode 100644 index c5960437385add981741064c2f4e1636f3dccc77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27000122 zcmeF)-HIK@5dh%5)>ACxCb^N71m_}m2AdFYz?i&%9Br^ck%S@we)^L!15MHMbLPx% zPtO;YP^YK6y6WrMU2SF{Km6s@@1Fnm^5Nz4+b=Kgo`3rF`5(W$fBEqC`H!#PJU{>Z z<;$nPe)ZMI-$q`)|NQRd^~<MUzPx??@6XMu?|%6EKfihY@#ViSZ$JO*=jXQ{-aUW& z^1qk&A3y!)<-?cf@8ACPu}S*z^RLgp|Nh5szx%_hKfihN=J~h(diAHTzkc=PKLiL6 zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF>??44x}EWB zUnIK`AV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5;&6$EZix5B?xXi^FS1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkLHV1e7yZT45eZ7J=#0<-VuwH98NUgrb|5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0Rl%0One9C=rZk3fB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZU=M-b*J<|H*d7E35FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXFj0*Jre~VmUa8%{6iyO%w)=y{S z-Ud6f`Um3L{u!%|KDu3;pW;<38cde9t1=jDyWR^YJ;%ETa?-xCvhTKO0s#U92oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5Ev229zzd(j2XIf;?)`PNW$)=-jNxb&Rf#m zeO?}`2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7$`t6nA98o3w~@Q6 zvI)IOb{ou!X+G|@wT%c6AV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5;d z=)POhJ5p>HvD#vbR2TsQ1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 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 z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXL5x70w&ii$Um`w=~*hgUDkEVT!v<m?O1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZV1~fZdl55ISwdjwcA7rUkN^P!1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oN~6Kzd2wkS@~hy}?jP+2o;V#tEz|P|l54P9^IK%SM0z0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t8kR$R4jZA6HD?o2t8G9O+&1=-}!JA1%QAYYN00uZg!t zh}&g*#Y=6RP4JNb0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5(DFR;(k^X@Kj zWM|~KbrbKryX~$lu*JO>b3SAn7y3qch|XjJ1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oN}zKzc;JQQ0Yf8*H@8DrvJ)3;(!E%UdT|Xt;HG<>XILGfG;rws*VL6ZY=X z9ZdU<1l?6eh6FGU$rvX<fB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72<$A7 zy~r_T_iV}jAEy+#=bRCNJ<G5c0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7dX6v$rch?m3!2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7&MV-> znDd^U$_Wr4K!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1nvr?*JJL^G=TsC z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U 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 z0RjXF5FkK+009Cw3-}Yp&EV1zAV7cs0RjXz3Y0&mZ9LfRwz4B%p6T{xDU1LC0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK%lKa{^gmrkwqgwfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72s9M<`}cS3U&9)NB5<3)_NV=}k|ZKPfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C7_6ltO0zkfV%92ml#(RsgpTOt>Yp;cJz4K1Xf{(3q z-lp;h5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7dXDNz22yxe1j009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZp!|P*N-HnGNxfV&xS!~vM#`}Fw<aTjiv-HYd*jL#^=wIfMcy+pN38iwzs?dM zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNCfO@S?c8|{40H*Z{%uD9RWCg~mzvc2EM zosZYAfFO|Hrf_NdG!N2hygmCpJGb<8PbIPtAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5(b5eVP+*mA@k0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0z(Mo-;EifU_}xjK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBn= zE|9(+v;Byj1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkLHbAi8qe?$E1oKblV1%`Ma-&bVAJ17(Z0t5&UAVA>t0#E%k_<C3k z5+Fc;009C72oNAZfB*pk1PBlyK!Ct3u<?WFr?^6SPn99>bpqiQADCWOTa(BKI@)ri zNo|7kFR=D7^k2CO2@oJafB*pk*9olsjI_9ZT^S-1AV7cs0RjXF5FkK+009C72oNCf zVu9N}Zw!e7Y5i*0Z2A#_@Kh{L-$zll`Mw^%(@}Xh)5;n`+K>ioJFOESK!5-N0t5yX zNI&P4gIyh!$Mcn4p=>5VfB*pk1PBlyK!5-N0t5&UAV7e?d4c>R%4xhSV19PjL7U$v zkUtFb_<cRrJ0ei`>EUX5j~YI!W$+$aRs#V71PBlyK%g#A{tS~=>IYpVK!5-N0t5&U zAV7cs0RjXF5FkK+z$gOgW6yces_cuxwkl7Yh63SUw|$Tr*7<m-66*1izED8Po>p#d zKjlq>n+uSR009C72oNAJ3#6Y$$^jw*1PBlyK!5-N0t5&UAV7cs0RjX*D^Px5IIp}0 zBsF+XM=9MSj3Ilg={<D4WhwP~t8k!tO3Ym=19f_5slo8h)O&M<QahaP?dbLU&)=g? zh*Bem>q!yv!S-m!PHm5$@62-<6S!I+fA(%0uQhdB0lg*4L7uHGucRE`Tw5sM=IqiD zAV7cs0RjXF5FkK+009C72oNAJv_SZPah?v{(Ids@jLi$kgI{`s%0&4}^S&Mo_}0E2 zBt4%xzbSji=d*8#u(zsm|CTKF5Ex6Ke9q^UtGft!FG?4(RHk_W<+l9l-f`P#d$Ze5 zpeup$<uI*uRpAZAlnCdOmNC~>&gT+=009C72oNAZfB*pk1PBlyK!5-N0t8+u5I$Jm z+haIBP4`BypTO4y!mFlL`xk|6Rh~EmdKL&TpENyFa|$vI&cwOmY+l>O@nRX}*~M)Z z2@oKV1h&6#lso5@6v}`A0RjXF5FkK+009C72oNAZfB*pk1PC+{$Ul)T1LjwKQeFC3 zA#gw-ysUOb$j|ONXfpu<TLki#SUz4nn{SxLi+hG!3{8dUaP26V0D%q#!W&DPc37&C z2oNAZfB*pk1PBlyK!5-N0t5&UAVA>t0_kJwG<bc>8YJ+zKzg~&gHTWXYS?T_fWSop z;gz`fYP~46umlJYAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK;W$c;m`4JZBt(a z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PE*q`1|+gAAyqsTb{HgdrsEr_{RmBJcMrz^6_Wm z!S>(!MCpqF0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5)WQlR{fL7#1wbzZvC z1mV&O4+Ni^svm69_~9V++UBc=gF8ro009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5C{T`-&F{EObHMmK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PHuR zp#1X8E8El*0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7csfgq57b0%Ce zB|v}x0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7dX zbAi8qf9YTI-~tlpQy@L_KL>r*uPOor2oTsS@be9Sal_s$_7fmLfB*pk1PBlyK!5-N z0t5&UAV7e?paSVr;z8?IHUR>Q0_mll4;FX!vzV7Ujr%D~B_9z8Phe&G5fE(>Ah0M< zd2`r%X)*qR#l3ke`wwKl`beePwM$o*B!15VYfr_r-gDV%BS3%v0RjXF5FkK+009C7 z2oNAZ;1PlFiQ*$QNJ@afF@f;<9pw)Jq3qCmel=V&JtL4{&jfLn009DD5J+#B`QQtU z>+wzjPuE`UT&x^dqLrJcmCAmX2oNAZfB*pk1PBlyK!5-N0t5&U_?kfY6!D7oZ%A=P z*<wB}5T2YceZ0I&3kc1o>7_|q1y9wc!S=}M$UNA7u(C77tn7KsrPS;+NKGv+rmF@7 z2oU&`K>n7P#-9?<?9~G4xmp}toqeqMi$rO$Z7(ToK4_alGy((&5FkK+009C72oNAZ zfB*pk1O^qzKQ^4k2f7Fm${=CGffSCsMj$*4<+RdixjC#<&h~RD)SRaMRJf&*RQ5dB za%AJ4Jo3gPm2G*nX<XSk)}_3!pOx?0{4<&j1PBo5Ss;JMOXHpkR@-m_>AA`Wsf)Cj zRz5gL2#bTqLHexfaTWy-AV7cs0RjXF5FkK+009C72oU(VK>FnHr^EK0Ayhgz55m<j z4V$l<hP<YS1?u-`4x9EI&a!wgh21q+4ApiqucvL~o1>*h?#bIcT?#l4es&S|pPc?o zSKp9lukWl}&4WBXuGHxgfi;0kpWC&h*R5aL&TzpGJLjDq4&oqzAdo*-`8aHwruD1k z{u@^El8%jc6&X_OI@`(S(8AiZlWLVgfB*pk1PBlyK!5-N0t5&UAV7e?3k23ahn&}M zYp`BMx_VnZ#}YkKXG%H`j#d8PsZjsg^uY?HzDQv0UZ?eo^6m{g*R%Ij|NE2k;-LTf zRhSE;o0u;e6CglfEP?b^HVw8^KJVYM^M*Zpi@%|y_oc{@%W)6=mR0>+>7i^j5FkK+ z009C72oNAZfB*pk1PBlyK%j|0_(ZfxOhE_`AV7dXUBG{R>OQU#AV8p%fcM*0lHw2` zK!5-N0t5&UAV7cs0RjXF5FkK+z$*pv57J-Rpr!~AAV8o)f&9Nd)40P5l|+C5fq?|_ zH`Rg4Rw@Ak1PBlyK!5-N0t5&UAV7cs0RjXF5O`J~|A5_JEuXy?vJ)Uc;8Ozr1N5oe ztyuyDS_z~#&sG7&AwYlt0RjXF5FkK+009C72oNAZfB*pkUl#De`<L&&-U$#O@SuSI z06mB=H30$y2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly 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 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2wWlX_wR4<-xayUBtU=w0RjXF5FkK+009C7ehMu9p1!#FGt|pAEFwIz_%c}S5FkK+ z009C7dK0+lXT09pRL|oATb{JXi&Ovs0t5(b7ufQ~KJD2a(9Zq^!cFhLU=<P|K!5-N z0t5&UAV7e?8G-O?V10Tf(amSq8o9X)=?D-YK!5-N0t8+ru=aE2H`iZwbFXWs$>VWd zc_I@aK;VM{m3QV3YJ8{Vwfp`Z0i6;cK!5-N0t5&UAV7e?UV-qt<lf`g?GJ@b)9Z4H zOyDVj@;UdYKXorI%Ig+i1S>270=onj-;2`Xu243AK_ERF^}!b?Zs@U&JYT(`jL)X1 z`+t^2;{^H_SbOpIU%3j;2)OTO^twG;-qvnQRTu#R1PBlyK!5-N0xuTGe>b_a%{=cs zzB9XA1g;Y(pY42QF>k)X%VCkItHttu<tvM&<{PH*;vS0x2oTsM5Z+kAv>qyK4%7Ns zSHCO}9+k@U%Sw9hO&~m|_42~z%CsKGRRRQ#33$;Ra~u7X`#$;|4E0xTXt)#(ni3#D zfB*pk1PBlyK;S8XOMhFrH270u@_tqzJkR;GiAf%C8aIh4$aaC?AEw*mtnF+ba4nH_ z0tAK@2=5hPdR=QFQJ7wrSL8PdgvVxW`lgok(v?8|$X!%ep5pNMKy8O}9XNQPJVyxZ z6$nq}-sAQUBoOX(J{_nFrOpER?JLJYDc=w-nGzsCfB*pk1PBoLnn3>J@u$Ya-RN|8 z&Q#tc$e99$IGdCV&Is(i*LUXHTU*$Frqujw2wR`#2h+H6B<-07m2KBu$_v<A!<n<^ zJ4)Hlhw3~+>a@wA^JdHP_I6!H=y_#tcMbP<$kM924qKZ_YSLYwt*PpMfhLbr9_0QO zWb8^HJq%q{HEuD<^U}e%K95&^?7lo+_JIOIrw1ZjdL)$h?&&VcK(XuW<C|0Qk5|$| z0ZAhbwp6ui^Ok`25FkK+009C72oNAZfB*pk1fCK|A9Pd(Q*Db^Th+W6d|GT3UmODW z2zZk3ah8Pu0RjXF5FkKc2mwDH4{@8mR%HHIeyw-?5+Fc;009C72oNAZfB*pk1PE*w z$UjH=IbI7}Ik<MjI)QfxtUdhi=uQ^|2oNAZfB*pkUlv&VS$A6hGK=1a5C~825H%~3 z009C72oNAZfB*pk1PBlyK%gIi@cB|X?Wa_g5a>jpe3{HEos_2x0t5&UAV7cs0Rl<D z&#sBW;H?7rL;ltt^+kXH0RjXF5FkK+009C72oNAZfB=CG1@ez)r*VfBDv1CA0t5&U zAVA>t0)8lc{VmpDMIb%@l|3#IAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U 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 z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PHua;P2nx4gX$gxaRiCW;I2C0D<!YYj2xt>*q6e7-6m1lj|LJ zs-%w#q(}PW4%#O`fWUTv^v*dCwjZ>U009E87YOf=&rV;jtw90=2oNAZfB*pk1PBly zFbS;v_6>&s0RjXr6<B-wU0c7jnC8LDE}EwhkicyMp6A=BB|0onKBXI14rg?bz)69% zNAzS^#|aR4u|WC0F=(@|X=G4;WfLGkfB*pk1PBlyK!5;&ZUw@J2Hn;<dSStNnvUL) z`Uw!|Rv^9MbX%dq76sCc%Lj`)-?W%FJB{DenqFQb(CR4-aW+n0!>ExC1@ecm!}63= z5y<b|Jg#hZ>3~2GJ`iD`Bca)~Cn{{~w!u;A>=saA1PBlyK!5-N0t5&UAVA=i0^t*b zX&TzhH-t;3Z3S}bwQ<{wq7fiKU=)G$t~g4;2kJ~crom#6baipCcw~sh)XosqD)LhT z>ETR+XWLI@OoL}Dk(~g6rv&o%fq7h3vSm+s%E~P8Q!n2zI$GY#JU-S@h;uB+$y1?* zGwqzL#Bl-y2oNAZfB*pk1PBlyK%h5)@VUXR^76C04%*yGAio8bajSIV5FkLHH-Yl4 zueS=f*Asf#ez3AL#0=BQL6-;+NCE@Ba0V(h@fr{yuvZ|w(x>U(2=o3{agJs0`P507 z{CLl8PPOHwrtw8Jr}*=rZI%!`P1|M>jQ{}x1PBlyK!5-N0$&hFzfx@+95dM%{PAta zx^t>ef%0)`Rc9W#RZMYO3FLPtA0LRHAHQyVps=qUspEf5L%#%af$-|cFZDT21>av@ zN<9zmFJSbH0kG|~3C@|4niMc}kfb+m7paA5Fm4yGuiS0A`4;Ek_m9sso2oq%q<%J~ z7<y3ev2rzaUD>nuQi{1{us8Uz{dpzFA~ZRb$~YV?MVJPMgM9X2u6NP+v$h&1K!5-N z0t5&UATWeL<rjgy^;bewF73@?|8)YD+jQ*Gb)_DQoVqx6eDA50uHj&B4d?f#;?IW? zVXr{K-#FMCzyJL|8}Gjb75)_Xd6z32eg?N836zZKk^zBPpnOO+u3QSZv4;A#GZoe& zr>kdDG(VfF$_LG}3>xr1yLP+lstN=E^t}H|?_**@CZN_2M8uVx9|OWLv$Wl9?~Nws z;+HmlqU=LHbN=lu`)erk?B8o;DNuS&GvzWf1PBlyK!5-N0t5&UAV7cs0RjXF5Fn5V zWWTRwR}Fg*$nMcR?4d9<5FpT@z~Vc`G}&RPN+Qs|K>32Yspj&aa^|L^r6sT-P(FtZ zW;W{i@}*M#%NlwoK!5-N0t5&UAV7cs0RjXF5FkK+Kt+M<2iS_4rK&5C-Kl9<H@|EI z2n;4rzG=)egSDw00(T3PFQx4h%k_&h+eus{Fp|LHOJHqsq{jF6vZ%3tyOjh85FkK+ z009C72oNAZfB*pk1PBlya77^dk@iX|d+!#=Zq_`!`%w7_5O}-5;#<cw`S!llPoSB= z+Kb2^;%2wNK?DX6i0>o=w4((A1PBlyK!5-N0t5&UAV7cs0RjXF3?q<!za6Hd;TuV} zYzl^NR)YixR21;;Q4v!r0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBl~A@KL_ zZ}H!WRJITxK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0tBMK-@m{3FJ2N8AV6Rwf%smxCmyMHy%0Dpu;<0Hz2@}MHWDB}fB*pk z1PBlyK!5-N0t5&U*cM1XOl>c7l>h+(1PC+}NPnB=pxL<&S`^4`M;b0JHc5a0ft>>B z%_IdoH}=0Qb+kX|zbO?GAV7cs0RjXF5FkK+z!ib?4e?46dkGLAK!5;&(*o&l@f@7a z^P-KZ<rmegR00GB5b)-6=q4tvDaba)OXbyUvEfmHjJF&fO=vxV9t6rKd7kN^whz{@ zcsojmxU9T7_RN=iAN$VgjsO7y1PBlyK!5-N0+~Sk0yxFlRYL*<2oNAZpo&2D2lwND zb7@q0s3ajkU_&6j&!lCGlj-W0gL5)**A#ylaHIE3X=AvN#3ceR638C%waT+)<#27I z`8@)q=RC7#Z?+~&m0cZs7<(VPQ{53DK!5-N0t5&UAV7dX{0?~fOEg9T1PBlyKp^{* z3S?U#<C=!s>s=*4fIuk_-$}}=+03EE+1@dR)dgb0DIP;<t&6PLjp14b^8|(w$e#aN zePwCOVXcGSo~M+VX6|b$9(Ug<9cKP);~m}$B@rM%fB*pk1PBlyK%k94{3f{nyLPtg z)x$Q<P9g9*fzz++J32jG%+8H>)ZAyzJs^En-cMD@u%D7%T1k>j!Alz{%T65~3d%g6 zojK%IckyS<du}}5;?s4;B=3sPwLJHDZtwnGT}kdQJ6pNdMYhb4zy}4=tK+HOQvr7b zPc^mk+}QHYEq5%7Wt@)hDD3W>S+jQ^cOrjQ;i$tCGTm-jyGPv?e5kO+?ha+Jm;eC+ z1PBlyK!89G0*jw)%gG)}{df)KO*uOAIN;HO>#l#i{T>R~COuu@cG`1SPZzUu<GHHt z*tN6ZTbCW`>yAne6>xg-9hJ*@QDE_IUd&m2`(lyV<het$BvppzDrvB5ySoMjtR2y9 zVQU4CJwM-$v3t}V0RjXF5FpUGz~bk_W;H*1db2hc4_fT~rIU*djy+l4sj>Uj9RUIa z2oNAZfB*pkFA~VUu-saCcGf(+^+d@D5NIP%zPeAGn<Y7s!Ipsqvd3c@-qdV)(BjNZ zr%OwK009C72oNAZfWTV>?)au~N6xo+s*?Z#0t5&UAV7cs0RjXFJSC8QA3s+{mLv_& zWwVO_fj0`I7k&z|F4BAovIT|&wgu9Y6N3|5;`S-t&fqEm0t5&UAV7cs0RjXz1hVfJ z^Kfzf{*{Z{O%fnLfB*pk1PBlyK!5-N0yha{-`UGkvIQGo|I58*2oU&`K=yX=sopi) zOdxyAvSG6_97KQs0RjXF5FkK+0D&ZseKDDb>8gML0RjXF5FkK+009C72oUI5p!{Cn zbG2$CK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF 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 zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly 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 z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs 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 zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PCk& z{Qdh|{I|H+Bmn{h2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ 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 z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72#hcA_wO(L8NXT;5+Fc;009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5NH=j|1oA7wC}Q#009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ 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 z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5*BXV+eL-UeX+ zfbRWY`dg()$buv#K**&>+7E{qV-8)GRwF=w009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAJO5pF`U;HzwtU3e;5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjZ> zEa3ml-1&6$Mt}eT0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk 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 z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N 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 zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7e?TLu39{T=!@pu=kY1J<b|0t5(LA+UT8ydsO31PBo5BapqP^+_tr zBtYKFfB*pk1PBlyaD_njDQliyk?1=yGt%!gu2TX82oNAZfB*pk1PJ^T$i6XcO@GF* z;X4B9Me?1Nb^2C;^kQBeytQk65%_|@@}Yii*UMh!mFIT!l*-9J<xZ)S009Db32gnP zs93+Nh4<xM;=ixQCw8>FFRLq0Z0%V!ud+{z&+0<81PBlyK!5-N0t5&U=qa%EP0E+4 zo_AriT=7*gT5Ub+i4NJgXBl!e7s&4BG;N;Z#Q|r%7dNQ2(FC#wc3EDwAx)P%?_EiS zrNO=Ryfu5`Eezh;`#1Yq-so>S=$gR20@;&zZ!tTwXEkTjtsvR9X}YyDtuK!pT1j!f zGuZN33dEhutNT|{oc%|>wlfhe2VbLjT))d(mR26ui-HLdAV7cs0RjXF5FpS^AboX8 zgKnuM8b=`A{dq7>VHZ^r`z@r1+sflYkSAU$H#=W_Vqa=LDiB`@N6*^-K7qEchZt=d zS94`?(zH5Y#le*HOd}O}Uv?xi{v5xockL_%ve&@R4W7Owkre{x1<FricJ;2ua9KuN zIgc<$h%v9|G{$dL^Eh#0cWGQ#UOGMv>LN_1ngprNKGeZTafWoLrWBJ2WOq4Dvu&mX z2oNAZfB*pk1PBlyFbSkDP4j@s2L<A5;5F@E+Eff)9^c|wF6rmh)tU>ZR`*+cx<I_+ zPwz$jKLz6LPUD}a${SLgc~IVb{%V#kP0vT3Bcy=SpjFIQ#)(kn@hjWc)FFZR3ORIe z-W-q5<BA}T5cs%2_8cA6IC*?4T^2T*Zk@VxJ*#1wHcS_THw@b$RIEIXFG}4cMUx;G zHF#0j54L=f<kQ2(S3(>=y)X3>AV7cs0RjXFyjUQ9a6L30$D~~LICZKd36yWyfLBxH z22BLgEp8I6bC6X0H0YdqD_txpjkh)*T~7hC!Jatr$e#U$Juy@q7mm2}EP;4ipF2Kk z-nP@D**oly4K_@d!ZwU~CRD0t8q~#^Bh;Pke=7ESbbP4VqrtcKA4+=T=B@hU`pNQQ zsPgz^q9(`Z3hP3p?&^*gPNm3u28B4?F72sv=bmmge<4x9{Oa}#skbiGm6W2@9p5@t z9X1`D2V3!nT2D2%t!jLM)Ocag)?_tW6R1K9KQFCTHPm8iVW_GK#iW9d4hk`MUdl3V zol4ubHav7a^)(M3+J&+S5FkK+009C72;3r&eVkrSZ>j3Kq{{|(u3T4=$c0+~=Q{%P z%iufxR(G17m+A=n52jr1&VDpIuM@~#kUyu_RU$G00<RSK`L0slu-{}W&i)8>J7eCu z2p>EZ(U#*6f^4<C#JO>0t4Qkv2oNCf1%bjJpt=2Q!xv2SNPqwV0t5&UAV7cs0RjXF z5FkK+009C72oM-hAp5U2aavt%lOWaE9V9@2009C72#g~TKNoF{$Ej8&1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+0D;d69Qsc=ar0-zG){m30RjXF5I7_dKS537LuYL!K!5-N z0t5&UAV7cs0RjXF5FkK+009C72oUHXko^apdD<bb6a)wmAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PGJ`{{H=K{VN}I zl>h+(1PBmF0$YDff3Bwp1|tY;-LDa9Qv(44R|ur1{)*sDVx|gP4VqLX2mt~F2oNAZ zfB*pk1PBlyK!5-N0tChpIQsMHIF+k}009C72#hAM|F7z3m8++%!2Valw6kq$(FhRe zBd~nT`{b2{009C72oNAZfB*pk1PBlyK!89`f%rRE&%AO)fp{1EXN4%UI?lLOr>h4o z5+E>wKze3JC`Jtg2&6}{Frd_2U`xAsq8kH#p~o9}r6$l#VD(w<mR+KI1>)Vmw-VV2 z5FkK+009C72oNAZfB*pkCk5gU9n&~Qi<jcMadUx4o!x~gSG?Lh^&<jCf#rC$g>2jE z9*YDB3?+~~w$pT|@)SehH3G|LZFME<H`|k4H9aJdVNTPn<IA1Pm94YZ2@oLAO<?)f zlvcXcAkh^9=|0Ybm?B<^>&65K5FkK+009C72oNAZfB=DE1uA~fs5mlg`y&(<J*V;h zlH$Srr^eqI`&y3A*B@h^k0t^E0(}JHlRJ<5<ducM(*>5#PF#uIZLP;WtK)cZ8n5oL zI16M}&AFEGvlTaj009Cw3S{p{X?kNxQkMnNJ(>pPo#|@Dk#yFeED&uEjmu$QaP^SJ z{>?9t(E<Si1PBlyK!5-N0(AoWzc`%SSuXEn@Sn%a**jnTS?$(_iaJxMinH;^94D@n z$0_fCgL37~uO@*ekyEsB2K)QUYTkeF{LYm6e5m~qQqo5c_V+vH&PU__EPhP$=2iW4 zXuF|#{cQubZT5Z9+G<}NE%QH=E;~C-e;!Xqe(v14p?Scac~`fkVwwzAQ|wtx+4pR| zbWf@z4K7VLZ1B{6he3aYR!#M<{Cyc)-HR*Y45ghlI8<$iipd%|IX#rR?dDYZ$*^;r zok3F4wu6hZ?+klr+t0=iMT?t%Mt=H+*lhLqaR}9&I!J&30RjXF5FkK+009C72oNAZ zfB*pkUl3US?tO39%X;F<y|u|sfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNCfCV}|>rKEAg22;${LBm8s5g<T-009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5I8EZ{C`>s5tf_dO5vbO1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1V$5x|LaRO9<5aM5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBngOW^O{-|D}+>XDZK0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U 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 zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyuoU?F_qY0Qxzh>(0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ 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 zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB=D=0)PMh zw*KvmU>gAf1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNA}M&R$?U(bJMN_Cb10RjXF5FkK+009C72oNAZfB*pk1PJsL z*z@~&&wAt{K;VpkC;E(@vjhkb7)oHzTl&3whT>8T0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0xuKz`QJld)~|L55FkK+009CY6j*-b`yhgr2@oJafB*pk1PBlqQy}}o zGG>vgB0zuu0RjXF5FkK+0D%Vyq;HxJs`+TCU+D3uiTwl!5FkLHAdvoaZVd`&J6uXt zb;u<J0RjXF5FkK+009D>1=0upd5~q#u1?czgDC+51PBlyK!5-N0t5&U$ON+QlG)XF zOux|MJMNS&2oNAZ;GqK9pW4-Fht`&PJ0z8Y009C72oNAZfB=E!0`ar`(ctmyJU$x1 zegXst5FkK+009C72oQLgK=xJfW!<HAVw-8v;AH~wE-%L~YgRko5m>&M&#!z(Z`tXV z-g2jvs|B|1MOwe2fE0WlT#-Ud0t5&UAV7cs0RkfkWFLKxPMf!Iw18}X+j_F#71Or$ zbcj~b<I9e8K)xbH^<AharaISjup-_0BNYXoPbvZd0%d`U2QwWhM;_#As`k)ekm9p4 zVhh=&d#ACmdEB#}W%i3!dNx&^>!RM5VXG_r)WN0O>dHkXtGRAptZp_{ULB$T!Blg_ zpntV8{uHRVkNuDQ?BcEsXDIHf`6+qN*j{n=3b(d(UQuEHm~BmtM(f}2BQh=-o0pwZ zG><GG0RjXF5FkK+009C72oNAZfB*pk1jZLgzmdkl6=lcxTjMM8ib;R~0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV6SCVD<lF+1fm<ukOzl3&&j|K!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyFpfa>|GmWNI7O<2009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+0D;d6{QdiD`0ulf8Ye)2009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs 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 zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly 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 z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72n-?c_wR4--w^dHk^lh$1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNBU2>5>?5)e}Y1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009D13jF>13;(8UP*Vg55FkK+009C72oNAZfB*pk1lkCM-`NfZ zZ7Pw4009C72oNApOJMK8rdE7$2oNAZfWV6a{>;6IFEs%I1PBlyK!5-N0t5&UAV7dX zhXQ-Qm~F0iSih185FkK+009D<0-Fyrn~R&rEfOF=fB=EH1vdXCE{k(_tvdn)2oNAZ zfB*pk1PBlyK!5;&F9_`Y_O-5mK|qfL2oNAZfWWK*2hTaPwyZA#1nvkNd}zck-AUnW z1A+Krg>i$tA4w5Nm%&F`)+PZ01PBlyK!5-N0t5&UAV7e?a02nKSowIkb`(s2009C7 z2oTs4NFH_ewpk}Y;Nt?xXGNG6vV{HRgTlzRT@y$yL=q%<HJ>K?O$iVnK!5-N0t5&U zAV7cs0RjXF5a?eZ|Di8l>A!vz5+Fc;009C7E(>_<xlC8_V0;ylam6e`T@XkvM?Sp} zbI>Dk@9kTNvzLt9SJ*P+roh<(;vkpLt_R~#@%U8O_~8BVsnj+Tm{s8ZTPcn(tCGG5 z5FkK+009C7UKEHQI2(^ob=|nO5!0RW>~nL@eq3j~|9EHhSL4)Y$JL8z7VvDRZ|!de z5+}OTY#e9SaqxM)!BEN2gVz~*E8yDI?5&Hno@>2Kd8)w$>c{Ouv;7p`rjiRp4UV+w zea+IKojAqi*5V+?<B;NbTW_z1vP%ZN6~EN8S9XV`zFtydwOLQtv-#?^#Sn8H{0x%p z57VCq?{5gXP7Uto9U{Uhli@bsxdfrvJ3$K1hFm3s!kC5IN-`#U3L_7?Eos(tQ{csm zyIIfu#TPr0ng9U;1PBlyK!5-N0;3C*d?{Od%y(AlJrBFCR0%E!fe#AA@2L;AuVn%R z2oNAZU?ze1!6qNi)Tv(b>l;=UoG@Mor?~E%J(b920t5&UAV7cs0RjXF5FkK+009C7 zrV&VfS3I8Xb-j0LZ@+Z{1nvtY@4Nc}MIb<c009C72=pV6JnAIVe(F@oO@ZXf=F=p8 zvLSiZlmGz&1PBlyK!5-N0t5&UAV7cs0RmM7lAj{;X_YL35Fl_zAbw-siQ_B*0t5&U zAV8phf%wTMANOCs3QGj?E4!?e9JGf30RjXF5FkK+009C72oNAZfB*pk1PBoLltB1z z3ZLp)vjhkbAV7csfmI+p3#|hz1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs 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 z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk 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 z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PC+``1|*F;a`Koq#!_m009C72$Tz4c%C_Rq`Z<( z?F@#x{*-`b2@oJafB*pk1PBlyK!5-N0t8}#@GIHDAl`3GfB*pkBMKaR$RE5kVy9{* z&_>|kjT2sKQ;94D2oPu~5I*AW51uajRE19$^H%&E;jKzq=KW^ZErsPGK!5-N0t5&U zAV7cs0RjXFbS{wpK$NU>Ucd4P5FkK+009Dx1(JuQ&1vJ3q$5Cp0D(sZHb3ga;-jf6 z1`h>?LB-%bhYJ0!gPu!O8vz0Y2oNAZfB*pk1PBlyK!Ct20?98($@G<yBqczAKo0`R z=V3hUp*%GZAV8phf%ubi8TVhX3JDPSjzIDOwK?6>NH*_nYro!YVQnaq_Sb2f)CXBM zt9oMbpaw6U5;(Xzr{YY!`G6>XX<`Ab5g<T-009C72oNAZfWY(u@i*Mf@$>>3BtYOh z0?DV`LF38J&FR5$FA*R>U{-<T^Dt@i_|;^yDFFfmE(;`|Hk;GS!SjPj{CvYhD@opE z`cR^w!{$o)%Fqpl;`6@Nm9W8J5!h3T*AJlLZOiyz=g==DZSGBf_PBR2U;i1(1_A^K z5FkK+009C72oNC9n?U~cHeTtiTJ;2h_%dA{hiC@V2!xwqnvQ-p5?WpcKR2J+5J%n{ zp9(nl<~^cy{h{6ul0KACSOQZD#BZfj4aNtT@u{;m6Cm(ef#joObNVh$Qc}fYo{L<u z$Pq&&u$$8n`&w(>Z0FkIqX;D>oho26;Hd~dHzz56?$0+Q5ss(%@yjbEiQ+w%6BQne zbDbI&#<z_C0RjXF5FkK+009C72s9Sh`+D2Bj0@@ZDt~VMLXn$C3M<?^dv>ufSNXQH z1=znSunE4o^I$Ova<H?*my+U-r|;IkS=+lMJ(PX3(>WF&5)+m{EYRT15~nL1hpGzq z|J)V=jyw3-W33H0iE5ScR-BvdJ6<mE)+LVf=GDfp4lxcbT(0(hgv+TN3<BXQgh6=e zBZJWRLxTwzFUYj%IxnnE-UeCn)~w_L4KBoSioB##E62gTN`L?X0t5&UAV7csfw2VQ zFGOQiu37?v3dC=^gYjN>$&tNn)(H?GK!Ct-0?FUF&FSk+B~`s%j{*n~AV7cs0RjY? z2_%n#`LtOj$BFX7mX+fpUL`<)009C72oNAZfWT)3lJ8KTb<jA09t4v2W8t)i%GE%C z009C7o)akfgIG6vlCf@Z(FhPAK!5-N0t99fNFE*YY4v9F6w6BWECLcBK!5-N0t5&U zAVA<d0`d2(?{uwG0>cT!Z`Cj!t_uYdAV7csfm#CLui?SqAXjqgV5gS|5FkK+009C7 z2%Hi~9yRmnL9~4HvU0HBO9TiIAV7cs0RjXF5Fl_<Abb(K8OLz~1PBlyK!5-N0<Q~% zhueJcdTk0IK!5-N0t5&U_^d$wbQ)GZYoc)i1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkL{e>-#_00000Ajsc(kP9IL1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r l3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*U9J`nIZdj0?a -- 1.7.2.5
13 years, 3 months
1
0
0
0
last-svn-commit-881-g68f091d the program detects , , . , i and j but still has a problem with "
by Raphael Boissel
--- scribo/sandbox/raphael/code/my/document/clean.hh | 5 +++- .../sandbox/raphael/code/my/document/document.hh | 26 +++++++++++++++++-- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/scribo/sandbox/raphael/code/my/document/clean.hh b/scribo/sandbox/raphael/code/my/document/clean.hh index 66b0c93..335a575 100644 --- a/scribo/sandbox/raphael/code/my/document/clean.hh +++ b/scribo/sandbox/raphael/code/my/document/clean.hh @@ -139,10 +139,13 @@ namespace mymln { draw::line(out, q,v, mln::literal::green); doc.add_to_line_link(v, q); + doc.add_letter_coerce(q); } - else if (doc.allign_H(q, v) && doc.allign_top(q, v)) //ORDRE DESPARAMETRE ETRANGE A CHECK + else if (doc.allign_H_Large(v, q) && doc.allign_top(v, q)) { draw::line(out, q,v, mln::literal::magenta); + doc.add_to_line_link(v, q); + doc.add_letter_coerce(q); } } } diff --git a/scribo/sandbox/raphael/code/my/document/document.hh b/scribo/sandbox/raphael/code/my/document/document.hh index e898111..1bd44ac 100644 --- a/scribo/sandbox/raphael/code/my/document/document.hh +++ b/scribo/sandbox/raphael/code/my/document/document.hh @@ -189,6 +189,8 @@ namespace mymln {containers_mask(lbl) = false;} void inline add_letter(const point2d& point) {add_letter(img_influ(point)); } + void inline add_letter_coerce(const point2d& point) + {add_letter_coerce(img_influ(point)); } void add_alone_letter(const point2d& point) {add_alone_letter(img_influ(point));} void add_alone_letter(const Label lbl) @@ -201,7 +203,17 @@ namespace mymln alone_letters_mask(lbl) = true; noise_mask(lbl) = false; } - + void add_letter_coerce(const Label lbl) + { + + letters_mask(lbl) = true; + separators_mask(lbl) = false; + containers_mask(lbl) = false; + Vseparator_mask(lbl) = false; + Hseparator_mask(lbl) = false; + alone_letters_mask(lbl) = false; + noise_mask(lbl) = false; + } void add_letter(const Label lbl) { CLet++; @@ -320,10 +332,18 @@ namespace mymln inline bool allign_top( const Label Left, const Label Right) { - short int allignV = label_allign_(0, Left, Right) * 1.5f; - return _bboxgp[Left].pcenter()[0] < _bboxgp[Right].pcenter()[0]; + short int allignV = label_allign_(0, Left, Right); + return allignV < label_size_(0, Left) && (_bboxgp[Left].pcenter()[0]) > (_bboxgp[Right].pcenter()[0]); } + inline bool allign_H_Large( const point2d& Left, const point2d& Right) + {return allign_H_Large(img_influ(Left), img_influ(Right));} + + inline bool allign_H_Large( const Label Left, const Label Right) + { + short int allignV = label_allign_(1, Left, Right) * 1.5f; + return allignV < label_size_(1, Left); + } inline bool allign_H( const point2d& Left, const point2d& Right) {return allign_H(img_influ(Left), img_influ(Right));} -- 1.7.2.5
13 years, 3 months
1
0
0
0
last-svn-commit-880-g6689819 this new project is able to analyse .and ,
by Raphael Boissel
--- scribo/sandbox/raphael/code/my/document/clean.hh | 80 ++++++++++- .../sandbox/raphael/code/my/document/document.hh | 148 ++++++++++++++++++-- scribo/sandbox/raphael/code/my/document/lettre.hh | 17 --- .../code/my/document/{title.hh => ligne.cc} | 0 scribo/sandbox/raphael/code/test.cc | 10 +- scribo/sandbox/raphael/code/test.ppm | Bin 0 -> 27000122 bytes 6 files changed, 220 insertions(+), 35 deletions(-) delete mode 100644 scribo/sandbox/raphael/code/my/document/lettre.hh rename scribo/sandbox/raphael/code/my/document/{title.hh => ligne.cc} (100%) create mode 100644 scribo/sandbox/raphael/code/test.ppm diff --git a/scribo/sandbox/raphael/code/my/document/clean.hh b/scribo/sandbox/raphael/code/my/document/clean.hh index a421439..66b0c93 100644 --- a/scribo/sandbox/raphael/code/my/document/clean.hh +++ b/scribo/sandbox/raphael/code/my/document/clean.hh @@ -58,8 +58,10 @@ namespace mymln } template<typename L, typename F, typename D> - void clean_get_lines(mymln::document::document<L,F,D>& doc) + void clean_get_lines(mymln::document::document<L,F,D>& doc, std::string dgb_out,image2d<bool> s) { + image2d<value::rgb8> out; + mln::initialize(out, s); typedef vertex_image<point2d,bool> v_ima_g; typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; v_ima_g mask = doc.fun_mask_letters(); @@ -69,24 +71,92 @@ namespace mymln mln_niter_(nbh_t) q(nbh, v); for_all(v) { + if(doc.contain_letter(v)) { + bool All_Alone = true; doc.jump_to_line(v); - doc.add_to_line(v); + if((!doc.contain_line(v))) + { + doc.add_to_line(v); + doc.add_to_line_self_link(v); + } + for_all(q) - { + { + if((!doc.contain_line(q))) { + // draw::line(out, q,v, mln::literal::blue); if((doc.allign_V(q,v))) { - doc.add_to_line(q); + doc.add_to_line_link(v, q); + draw::line(out, q,v, mln::literal::magenta); + All_Alone = false; } } + else + { + if(doc.allign_V(q,v)) + { + doc.add_to_line_link(q, v); + draw::line(out, q,v, mln::literal::green); + All_Alone = false; + } + } + } + if(All_Alone) + { + doc.add_alone_letter(v); } } + } + doc.cook_lines(); + io::ppm::save(mln::debug::superpose(out, s, literal::white),dgb_out); } + + + template<typename L, typename F, typename D> + void clean_dot_items(mymln::document::document<L,F,D>& doc, std::string dgb_out,image2d<bool> s) + { + image2d<value::rgb8> out; + mln::initialize(out, s); + typedef vertex_image<point2d,bool> v_ima_g; + typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p; + v_ima_g mask = doc.fun_mask_alone_letters(); + mln_piter_(v_ima_g) v(mask.domain()); + typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t; + nbh_t nbh(mask); + mln_niter_(nbh_t) q(nbh, v); + for_all(v) + { + if(doc.contain_line(v)) + { + for_all(q) + { + if(!doc.allign_H(q, v) && doc.allign_base_line(v, q)) + { + draw::line(out, q,v, mln::literal::green); + doc.add_to_line_link(v, q); + } + else if (doc.allign_H(q, v) && doc.allign_top(q, v)) //ORDRE DESPARAMETRE ETRANGE A CHECK + { + draw::line(out, q,v, mln::literal::magenta); + } + } + } + } + io::ppm::save(mln::debug::superpose(out, s, literal::white),dgb_out); + doc.cook_lines(); + } + + + } + + + } - } + #endif \ No newline at end of file diff --git a/scribo/sandbox/raphael/code/my/document/document.hh b/scribo/sandbox/raphael/code/my/document/document.hh index b203f20..e898111 100644 --- a/scribo/sandbox/raphael/code/my/document/document.hh +++ b/scribo/sandbox/raphael/code/my/document/document.hh @@ -44,9 +44,12 @@ namespace mymln Hseparator_mask = fun::i2v::array<bool>(Areas + 1); Vseparator_mask = fun::i2v::array<bool>(Areas + 1); noise_mask = fun::i2v::array<bool>(Areas + 1); + alone_letters_mask = fun::i2v::array<bool>(Areas + 1); lines_mark = mln::util::array<unsigned int>(Areas + 1); + lines_mark_link = mln::util::array<unsigned int>(Areas + 1); lines_mark.fill(0); + lines_mark_link.fill(0); img_influ = ima_influ; CSep = 0; CSepH = 0; @@ -57,9 +60,20 @@ namespace mymln } /* OPERATION ON LINES */ + inline void add_to_line_self_link(const point2d& point) + { + add_to_line_self_link(img_influ(point)); + } inline void add_to_line(const point2d& point) { add_to_line(img_influ(point)); } + + inline void add_to_line_link(const point2d& A, const point2d& B) + { add_to_line_link(img_influ(A), img_influ(B)); } + inline bool same_line(const point2d& A, const point2d& B) + { return same_line(img_influ(A), img_influ(B)); } + inline bool same_line(const Label A, const Label B) + { return lines_mark[A] == lines_mark[B]; } inline void add_new_line(const point2d& point) { add_new_line(img_influ(point)); } @@ -70,11 +84,59 @@ namespace mymln { return contain_line(img_influ(point)); } inline void add_to_line(const Label lbl) - { lines_mark[lbl] = CLine; std::cout << "add : " << CLine; } + { lines_mark[lbl] = CLine; } inline void add_new_line(const Label lbl) { CLine = NLine; NLine++; } + inline void add_to_line_self_link(const Label A) + { + lines_mark_link[A] = A; + } + inline void add_to_line_link(const Label A, const Label B) + { + + unsigned int Pos = find_line_parent(A); + if(lines_mark_link[B] == 0) + { + if(Pos != B) + { + if(Pos != 0) + { + lines_mark_link[B] = Pos; + lines_mark_link[A] = Pos; + } + else + { + lines_mark_link[A] = B; + } + } + } + else + { + unsigned int PosB = find_line_parent(B); + if(PosB == Pos) + { + lines_mark_link[B] = Pos; + lines_mark_link[A] = Pos; + } + else + { + lines_mark_link[B] = Pos; + lines_mark_link[PosB] = Pos; + } + } + + + + } + inline unsigned int find_line_parent(const Label A) + { + unsigned int Pos = A; + while(Pos != lines_mark_link[Pos] && Pos != 0){Pos = lines_mark_link[Pos];} + return Pos; + } + inline void jump_to_line(const Label lbl) { if(lines_mark[lbl] != 0) @@ -99,19 +161,20 @@ namespace mymln containers_mask(lbl) = false; Hseparator_mask(lbl) = false; Vseparator_mask(lbl) = false; + alone_letters_mask(lbl) = false; noise_mask(lbl) = true; } void inline add(Label lbl, int link) { if (link == 0){add_noise(lbl);} - else if (link > 40){ add_separator(lbl);} + else if (link > 30){ add_separator(lbl);} else { add_letter(lbl);} } void inline invalid_letter(const point2d& point) {invalid_letter(img_influ(point));} void invalid_letter(Label lbl) - {letters_mask(lbl) = true;} + {letters_mask(lbl) = false;} void inline invalid_separator(const point2d& point) {invalid_separator(img_influ(point));} void invalid_separator(Label lbl) @@ -126,6 +189,19 @@ namespace mymln {containers_mask(lbl) = false;} void inline add_letter(const point2d& point) {add_letter(img_influ(point)); } + void add_alone_letter(const point2d& point) + {add_alone_letter(img_influ(point));} + void add_alone_letter(const Label lbl) + { + letters_mask(lbl) = false; + separators_mask(lbl) = false; + containers_mask(lbl) = false; + Vseparator_mask(lbl) = false; + Hseparator_mask(lbl) = false; + alone_letters_mask(lbl) = true; + noise_mask(lbl) = false; + } + void add_letter(const Label lbl) { CLet++; @@ -136,6 +212,7 @@ namespace mymln containers_mask(lbl) = false; Vseparator_mask(lbl) = false; Hseparator_mask(lbl) = false; + alone_letters_mask(lbl) = false; noise_mask(lbl) = false; } @@ -155,6 +232,7 @@ namespace mymln letters_mask(lbl) = false; separators_mask(lbl) = false; noise_mask(lbl) = false; + alone_letters_mask(lbl) = false; } else add_noise(lbl); @@ -167,7 +245,7 @@ namespace mymln Hseparator_mask(lbl) = true; letters_mask(lbl) = false; separators_mask(lbl) = true; - + alone_letters_mask(lbl) = false; noise_mask(lbl) = false; } void add_Vseparator(const Label lbl) @@ -178,7 +256,7 @@ namespace mymln Hseparator_mask(lbl) = false; letters_mask(lbl) = false; separators_mask(lbl) = true; - + alone_letters_mask(lbl) = false; noise_mask(lbl) = false; } void inline add_separator(const point2d& point) @@ -193,6 +271,12 @@ namespace mymln add_container(lbl); } + bool inline contain_alone_letter(const Label lbl) + {return contain_(lbl, alone_letters_mask);} + + bool inline contain_alone_letter(const point2d& point) + {return contain_alone_letter(img_influ(point));} + bool inline contain_separator(const Label lbl) {return contain_(lbl, separators_mask);} @@ -231,21 +315,39 @@ namespace mymln /* ALLIGN FUNCTION */ + inline bool allign_top( const point2d& Left, const point2d& Right) + {return allign_top(img_influ(Left), img_influ(Right));} + + inline bool allign_top( const Label Left, const Label Right) + { + short int allignV = label_allign_(0, Left, Right) * 1.5f; + return _bboxgp[Left].pcenter()[0] < _bboxgp[Right].pcenter()[0]; + } + + inline bool allign_H( const point2d& Left, const point2d& Right) {return allign_H(img_influ(Left), img_influ(Right));} inline bool allign_H( const Label Left, const Label Right) { - return label_allign_(1, Left, Right) < label_size_(1 ,Left); + short int allignV = label_allign_(1, Left, Right) * 2; + return allignV < label_size_(1, Left) && allignV < label_size_(1, Right); } inline bool allign_V( const point2d& Left, const point2d& Right) {return allign_V(img_influ(Left), img_influ(Right));} inline bool allign_V( const Label Left, const Label Right) { - short int allignV = label_allign_(0, Left, Right) * 4; + short int allignV = label_allign_(0, Left, Right) * 2; return allignV < label_size_(0, Left) && allignV < label_size_(0, Right); } + inline bool allign_base_line(const point2d& Left, const point2d& Right) + {return allign_base_line(img_influ(Left), img_influ(Right));} + inline bool allign_base_line(const Label Left, const Label Right) + { + short int allignV = label_allign_(0, Left, Right) * 1.5f; + return allignV < label_size_(0, Left) && _bboxgp[Left].pcenter()[0] < _bboxgp[Right].pcenter()[0]; + } inline bool allign_Space_Factor(const point2d& Left, const point2d& Right) {return allign_Space_Factor(img_influ(Left), img_influ(Right));} @@ -272,6 +374,8 @@ namespace mymln { return fun_mask_(separators_mask); } vertex_image<point2d,bool> fun_mask_containers() { return fun_mask_(containers_mask); } + vertex_image<point2d,bool> fun_mask_alone_letters() + { return fun_mask_(alone_letters_mask); } vertex_image<point2d,bool> fun_mask_all() { typedef vertex_image<point2d,bool> v_ima_g; @@ -288,6 +392,8 @@ namespace mymln { return image_mask_(letters_mask); } image2d<bool> image_mask_noise() { return image_mask_(noise_mask); } + image2d<bool> image_mask_alone_letters() + { return image_mask_(alone_letters_mask); } mln::util::array<box2d> bbox_mask_containers() { return bbox_mask_(containers_mask); } @@ -298,7 +404,7 @@ namespace mymln mln::util::array<box2d> bbox_mask_noise() { return bbox_mask_(noise_mask); } - mln::util::array<box2d> bbox_enlarge_mask_containers(short int x, short int y) + mln::util::array<box2d> bbox_enlarge_mask_containers(short int x, short int y) { return bbox_mask_enlarge_(containers_mask, x, y); } mln::util::array<box2d> bbox_enlarge_mask_separators(short int x, short int y) { return bbox_mask_enlarge_(separators_mask, x, y); } @@ -307,7 +413,16 @@ namespace mymln mln::util::array<box2d> bbox_enlarge_mask_noise(short int x, short int y) { return bbox_mask_enlarge_(noise_mask, x, y); } + unsigned int get_parent_line(point2d point) + { return lines_mark[img_influ(point)]; } + unsigned int get_parent_line(Label L) + { return lines_mark[L]; } + + void cook_lines() + { + propage_line_link(); + } /*image_if<image2d<Label> masked_image_letters() {return masked_image_(letters_mask); } @@ -315,6 +430,17 @@ namespace mymln {return masked_image_(letters_mask); }*/ private: + // PRIVATE FUNCTIONS ON LINES + inline void propage_line_link() + { + for(unsigned int N = 1; N < lines_mark_link.size(); N++) + { + unsigned int Pos = N; + while(Pos != lines_mark_link[Pos] && Pos != 0){Pos = lines_mark_link[Pos]; } + lines_mark[N] = lines_mark[Pos]; + } + } + // GENERIC CONTAIN TEST inline bool contain_(const Label& lbl, const fun::i2v::array<bool>& array) { @@ -411,11 +537,15 @@ namespace mymln fun::i2v::array<bool> Vseparator_mask; fun::i2v::array<bool> separators_mask; fun::i2v::array<bool> letters_mask; + fun::i2v::array<bool> alone_letters_mask; fun::i2v::array<bool> containers_mask; fun::i2v::array<bool> noise_mask; unsigned int CLine; unsigned int NLine; - mln::util::array<unsigned int> lines_mark; + + mln::util::array<Label> lines_start; + mln::util::array<unsigned int> lines_mark; + mln::util::array<unsigned int> lines_mark_link; unsigned int CLet ; unsigned int CSep ; unsigned int CSepH ; diff --git a/scribo/sandbox/raphael/code/my/document/lettre.hh b/scribo/sandbox/raphael/code/my/document/lettre.hh deleted file mode 100644 index 98a1725..0000000 --- a/scribo/sandbox/raphael/code/my/document/lettre.hh +++ /dev/null @@ -1,17 +0,0 @@ -class line -{ - public: - line(){} - void add(lettre& ltr) - {lettres.append(ltr);} - private: - mln::util::array<vbbox> lettres; - std::string name;} -class lettre -{ - public: - letter(){} - private: - std::string name; - -} \ No newline at end of file diff --git a/scribo/sandbox/raphael/code/my/document/title.hh b/scribo/sandbox/raphael/code/my/document/ligne.cc similarity index 100% rename from scribo/sandbox/raphael/code/my/document/title.hh rename to scribo/sandbox/raphael/code/my/document/ligne.cc diff --git a/scribo/sandbox/raphael/code/test.cc b/scribo/sandbox/raphael/code/test.cc index 9891667..58edba0 100644 --- a/scribo/sandbox/raphael/code/test.cc +++ b/scribo/sandbox/raphael/code/test.cc @@ -62,7 +62,7 @@ void Process(std::string File, std::string Dir) uint16 areas_detected; timer.start(); - image2d<uint16> ima_blob = labeling::blobs(ima, c4(), areas_detected); + image2d<uint16> ima_blob = labeling::blobs(ima, c8(), areas_detected); std::cout << "CREATE BLOBS : " << timer.stop() << endl; timer.restart(); timer.start(); @@ -70,8 +70,8 @@ void Process(std::string File, std::string Dir) std::cout << "CREATE INFLUENCE ZONE GEODESIC : " << timer.stop() << endl; timer.restart(); timer.start(); - util::graph grph = make::influence_zone_adjacency_graph(ima_influ, c4(), areas_detected); - + util::graph grph = make::influence_zone_adjacency_graph(ima_influ, c8(), areas_detected); + // mymln::debug::save_label_image(ima_influ, Dir + "/influ_" + File); std::cout << "CREATE GRAPH : " << timer.stop() << endl; @@ -116,12 +116,14 @@ void Process(std::string File, std::string Dir) //mymln::debug::save_label_image(ima_influ, "influ_" + File); mymln::document::clean_containers_items(doc); mymln::document::clean_letters_items(doc); - mymln::document::clean_get_lines(doc); + mymln::document::clean_get_lines(doc, Dir + "/" + "line_graph_" + File, doc.image_mask_letters()); + mymln::document::clean_dot_items(doc, Dir + "/" + "dot_graph_" + File, doc.image_mask_letters()); doc.stat(); std::cout << "WORK ON GRAPH : " << timer.stop() << endl; //io::ppm::save(ima_influ, "separator.ppm"); //io::pbm::save(doc.image_mask_separators(),"separators"); io::pbm::save(doc.image_mask_letters(),Dir + "/" + "letters_" + File); + io::pbm::save(doc.image_mask_alone_letters(),Dir + "/" + "letters_alone_" + File); io::pbm::save(doc.image_mask_separators(),Dir + "/" + "separators_" + File); io::pbm::save(doc.image_mask_containers(),Dir + "/" + "containers_" + File); io::pbm::save(doc.image_mask_noise(),Dir + "/" + "noise_" + File); diff --git a/scribo/sandbox/raphael/code/test.ppm b/scribo/sandbox/raphael/code/test.ppm new file mode 100644 index 0000000000000000000000000000000000000000..c5960437385add981741064c2f4e1636f3dccc77 GIT binary patch literal 27000122 zcmeF)-HIK@5dh%5)>ACxCb^N71m_}m2AdFYz?i&%9Br^ck%S@we)^L!15MHMbLPx% zPtO;YP^YK6y6WrMU2SF{Km6s@@1Fnm^5Nz4+b=Kgo`3rF`5(W$fBEqC`H!#PJU{>Z z<;$nPe)ZMI-$q`)|NQRd^~<MUzPx??@6XMu?|%6EKfihY@#ViSZ$JO*=jXQ{-aUW& z^1qk&A3y!)<-?cf@8ACPu}S*z^RLgp|Nh5szx%_hKfihN=J~h(diAHTzkc=PKLiL6 zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF>??44x}EWB zUnIK`AV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5;&6$EZix5B?xXi^FS1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkLHV1e7yZT45eZ7J=#0<-VuwH98NUgrb|5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0Rl%0One9C=rZk3fB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZU=M-b*J<|H*d7E35FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXFj0*Jre~VmUa8%{6iyO%w)=y{S z-Ud6f`Um3L{u!%|KDu3;pW;<38cde9t1=jDyWR^YJ;%ETa?-xCvhTKO0s#U92oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5Ev229zzd(j2XIf;?)`PNW$)=-jNxb&Rf#m zeO?}`2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7$`t6nA98o3w~@Q6 zvI)IOb{ou!X+G|@wT%c6AV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5;d z=)POhJ5p>HvD#vbR2TsQ1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 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 z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXL5x70w&ii$Um`w=~*hgUDkEVT!v<m?O1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZV1~fZdl55ISwdjwcA7rUkN^P!1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oN~6Kzd2wkS@~hy}?jP+2o;V#tEz|P|l54P9^IK%SM0z0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t8kR$R4jZA6HD?o2t8G9O+&1=-}!JA1%QAYYN00uZg!t zh}&g*#Y=6RP4JNb0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5(DFR;(k^X@Kj zWM|~KbrbKryX~$lu*JO>b3SAn7y3qch|XjJ1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oN}zKzc;JQQ0Yf8*H@8DrvJ)3;(!E%UdT|Xt;HG<>XILGfG;rws*VL6ZY=X z9ZdU<1l?6eh6FGU$rvX<fB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72<$A7 zy~r_T_iV}jAEy+#=bRCNJ<G5c0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7dX6v$rch?m3!2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7&MV-> znDd^U$_Wr4K!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1nvr?*JJL^G=TsC z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U 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 z0RjXF5FkK+009Cw3-}Yp&EV1zAV7cs0RjXz3Y0&mZ9LfRwz4B%p6T{xDU1LC0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK%lKa{^gmrkwqgwfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72s9M<`}cS3U&9)NB5<3)_NV=}k|ZKPfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C7_6ltO0zkfV%92ml#(RsgpTOt>Yp;cJz4K1Xf{(3q z-lp;h5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7dXDNz22yxe1j009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZp!|P*N-HnGNxfV&xS!~vM#`}Fw<aTjiv-HYd*jL#^=wIfMcy+pN38iwzs?dM zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNCfO@S?c8|{40H*Z{%uD9RWCg~mzvc2EM zosZYAfFO|Hrf_NdG!N2hygmCpJGb<8PbIPtAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5(b5eVP+*mA@k0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0z(Mo-;EifU_}xjK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBn= zE|9(+v;Byj1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U 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 z0RjXF5C{T`-&F{EObHMmK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PHuR zp#1X8E8El*0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7csfgq57b0%Ce zB|v}x0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7dX zbAi8qf9YTI-~tlpQy@L_KL>r*uPOor2oTsS@be9Sal_s$_7fmLfB*pk1PBlyK!5-N z0t5&UAV7e?paSVr;z8?IHUR>Q0_mll4;FX!vzV7Ujr%D~B_9z8Phe&G5fE(>Ah0M< zd2`r%X)*qR#l3ke`wwKl`beePwM$o*B!15VYfr_r-gDV%BS3%v0RjXF5FkK+009C7 z2oNAZ;1PlFiQ*$QNJ@afF@f;<9pw)Jq3qCmel=V&JtL4{&jfLn009DD5J+#B`QQtU z>+wzjPuE`UT&x^dqLrJcmCAmX2oNAZfB*pk1PBlyK!5-N0t5&U_?kfY6!D7oZ%A=P z*<wB}5T2YceZ0I&3kc1o>7_|q1y9wc!S=}M$UNA7u(C77tn7KsrPS;+NKGv+rmF@7 z2oU&`K>n7P#-9?<?9~G4xmp}toqeqMi$rO$Z7(ToK4_alGy((&5FkK+009C72oNAZ zfB*pk1O^qzKQ^4k2f7Fm${=CGffSCsMj$*4<+RdixjC#<&h~RD)SRaMRJf&*RQ5dB za%AJ4Jo3gPm2G*nX<XSk)}_3!pOx?0{4<&j1PBo5Ss;JMOXHpkR@-m_>AA`Wsf)Cj zRz5gL2#bTqLHexfaTWy-AV7cs0RjXF5FkK+009C72oU(VK>FnHr^EK0Ayhgz55m<j z4V$l<hP<YS1?u-`4x9EI&a!wgh21q+4ApiqucvL~o1>*h?#bIcT?#l4es&S|pPc?o zSKp9lukWl}&4WBXuGHxgfi;0kpWC&h*R5aL&TzpGJLjDq4&oqzAdo*-`8aHwruD1k z{u@^El8%jc6&X_OI@`(S(8AiZlWLVgfB*pk1PBlyK!5-N0t5&UAV7e?3k23ahn&}M zYp`BMx_VnZ#}YkKXG%H`j#d8PsZjsg^uY?HzDQv0UZ?eo^6m{g*R%Ij|NE2k;-LTf zRhSE;o0u;e6CglfEP?b^HVw8^KJVYM^M*Zpi@%|y_oc{@%W)6=mR0>+>7i^j5FkK+ z009C72oNAZfB*pk1PBlyK%j|0_(ZfxOhE_`AV7dXUBG{R>OQU#AV8p%fcM*0lHw2` zK!5-N0t5&UAV7cs0RjXF5FkK+z$*pv57J-Rpr!~AAV8o)f&9Nd)40P5l|+C5fq?|_ zH`Rg4Rw@Ak1PBlyK!5-N0t5&UAV7cs0RjXF5O`J~|A5_JEuXy?vJ)Uc;8Ozr1N5oe ztyuyDS_z~#&sG7&AwYlt0RjXF5FkK+009C72oNAZfB*pkUl#De`<L&&-U$#O@SuSI z06mB=H30$y2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly 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 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2wWlX_wR4<-xayUBtU=w0RjXF5FkK+009C7ehMu9p1!#FGt|pAEFwIz_%c}S5FkK+ z009C7dK0+lXT09pRL|oATb{JXi&Ovs0t5(b7ufQ~KJD2a(9Zq^!cFhLU=<P|K!5-N z0t5&UAV7e?8G-O?V10Tf(amSq8o9X)=?D-YK!5-N0t8+ru=aE2H`iZwbFXWs$>VWd zc_I@aK;VM{m3QV3YJ8{Vwfp`Z0i6;cK!5-N0t5&UAV7e?UV-qt<lf`g?GJ@b)9Z4H zOyDVj@;UdYKXorI%Ig+i1S>270=onj-;2`Xu243AK_ERF^}!b?Zs@U&JYT(`jL)X1 z`+t^2;{^H_SbOpIU%3j;2)OTO^twG;-qvnQRTu#R1PBlyK!5-N0xuTGe>b_a%{=cs zzB9XA1g;Y(pY42QF>k)X%VCkItHttu<tvM&<{PH*;vS0x2oTsM5Z+kAv>qyK4%7Ns zSHCO}9+k@U%Sw9hO&~m|_42~z%CsKGRRRQ#33$;Ra~u7X`#$;|4E0xTXt)#(ni3#D zfB*pk1PBlyK;S8XOMhFrH270u@_tqzJkR;GiAf%C8aIh4$aaC?AEw*mtnF+ba4nH_ z0tAK@2=5hPdR=QFQJ7wrSL8PdgvVxW`lgok(v?8|$X!%ep5pNMKy8O}9XNQPJVyxZ z6$nq}-sAQUBoOX(J{_nFrOpER?JLJYDc=w-nGzsCfB*pk1PBoLnn3>J@u$Ya-RN|8 z&Q#tc$e99$IGdCV&Is(i*LUXHTU*$Frqujw2wR`#2h+H6B<-07m2KBu$_v<A!<n<^ zJ4)Hlhw3~+>a@wA^JdHP_I6!H=y_#tcMbP<$kM924qKZ_YSLYwt*PpMfhLbr9_0QO zWb8^HJq%q{HEuD<^U}e%K95&^?7lo+_JIOIrw1ZjdL)$h?&&VcK(XuW<C|0Qk5|$| z0ZAhbwp6ui^Ok`25FkK+009C72oNAZfB*pk1fCK|A9Pd(Q*Db^Th+W6d|GT3UmODW z2zZk3ah8Pu0RjXF5FkKc2mwDH4{@8mR%HHIeyw-?5+Fc;009C72oNAZfB*pk1PE*w z$UjH=IbI7}Ik<MjI)QfxtUdhi=uQ^|2oNAZfB*pkUlv&VS$A6hGK=1a5C~825H%~3 z009C72oNAZfB*pk1PBlyK%gIi@cB|X?Wa_g5a>jpe3{HEos_2x0t5&UAV7cs0Rl<D z&#sBW;H?7rL;ltt^+kXH0RjXF5FkK+009C72oNAZfB=CG1@ez)r*VfBDv1CA0t5&U zAVA>t0)8lc{VmpDMIb%@l|3#IAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U 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 z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ 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 z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBl~A@KL_ zZ}H!WRJITxK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0tBMK-@m{3FJ2N8AV6Rwf%smxCmyMHy%0Dpu;<0Hz2@}MHWDB}fB*pk z1PBlyK!5-N0t5&U*cM1XOl>c7l>h+(1PC+}NPnB=pxL<&S`^4`M;b0JHc5a0ft>>B z%_IdoH}=0Qb+kX|zbO?GAV7cs0RjXF5FkK+z!ib?4e?46dkGLAK!5;&(*o&l@f@7a z^P-KZ<rmegR00GB5b)-6=q4tvDaba)OXbyUvEfmHjJF&fO=vxV9t6rKd7kN^whz{@ zcsojmxU9T7_RN=iAN$VgjsO7y1PBlyK!5-N0+~Sk0yxFlRYL*<2oNAZpo&2D2lwND zb7@q0s3ajkU_&6j&!lCGlj-W0gL5)**A#ylaHIE3X=AvN#3ceR638C%waT+)<#27I z`8@)q=RC7#Z?+~&m0cZs7<(VPQ{53DK!5-N0t5&UAV7dX{0?~fOEg9T1PBlyKp^{* z3S?U#<C=!s>s=*4fIuk_-$}}=+03EE+1@dR)dgb0DIP;<t&6PLjp14b^8|(w$e#aN zePwCOVXcGSo~M+VX6|b$9(Ug<9cKP);~m}$B@rM%fB*pk1PBlyK%k94{3f{nyLPtg z)x$Q<P9g9*fzz++J32jG%+8H>)ZAyzJs^En-cMD@u%D7%T1k>j!Alz{%T65~3d%g6 zojK%IckyS<du}}5;?s4;B=3sPwLJHDZtwnGT}kdQJ6pNdMYhb4zy}4=tK+HOQvr7b zPc^mk+}QHYEq5%7Wt@)hDD3W>S+jQ^cOrjQ;i$tCGTm-jyGPv?e5kO+?ha+Jm;eC+ z1PBlyK!89G0*jw)%gG)}{df)KO*uOAIN;HO>#l#i{T>R~COuu@cG`1SPZzUu<GHHt z*tN6ZTbCW`>yAne6>xg-9hJ*@QDE_IUd&m2`(lyV<het$BvppzDrvB5ySoMjtR2y9 zVQU4CJwM-$v3t}V0RjXF5FpUGz~bk_W;H*1db2hc4_fT~rIU*djy+l4sj>Uj9RUIa z2oNAZfB*pkFA~VUu-saCcGf(+^+d@D5NIP%zPeAGn<Y7s!Ipsqvd3c@-qdV)(BjNZ zr%OwK009C72oNAZfWTV>?)au~N6xo+s*?Z#0t5&UAV7cs0RjXFJSC8QA3s+{mLv_& zWwVO_fj0`I7k&z|F4BAovIT|&wgu9Y6N3|5;`S-t&fqEm0t5&UAV7cs0RjXz1hVfJ z^Kfzf{*{Z{O%fnLfB*pk1PBlyK!5-N0yha{-`UGkvIQGo|I58*2oU&`K=yX=sopi) zOdxyAvSG6_97KQs0RjXF5FkK+0D&ZseKDDb>8gML0RjXF5FkK+009C72oUI5p!{Cn zbG2$CK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF 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 zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly 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 z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs 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 zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PCk& z{Qdh|{I|H+Bmn{h2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ 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 z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72#hcA_wO(L8NXT;5+Fc;009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5NH=j|1oA7wC}Q#009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ 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 z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5*BXV+eL-UeX+ zfbRWY`dg()$buv#K**&>+7E{qV-8)GRwF=w009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAJO5pF`U;HzwtU3e;5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjZ> zEa3ml-1&6$Mt}eT0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk 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 z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N 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 zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly 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 zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBngOW^O{-|D}+>XDZK0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U 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 zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyuoU?F_qY0Qxzh>(0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ 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 zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB=D=0)PMh zw*KvmU>gAf1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNA}M&R$?U(bJMN_Cb10RjXF5FkK+009C72oNAZfB*pk1PJsL z*z@~&&wAt{K;VpkC;E(@vjhkb7)oHzTl&3whT>8T0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0xuKz`QJld)~|L55FkK+009CY6j*-b`yhgr2@oJafB*pk1PBlqQy}}o zGG>vgB0zuu0RjXF5FkK+0D%Vyq;HxJs`+TCU+D3uiTwl!5FkLHAdvoaZVd`&J6uXt zb;u<J0RjXF5FkK+009D>1=0upd5~q#u1?czgDC+51PBlyK!5-N0t5&U$ON+QlG)XF zOux|MJMNS&2oNAZ;GqK9pW4-Fht`&PJ0z8Y009C72oNAZfB=E!0`ar`(ctmyJU$x1 zegXst5FkK+009C72oQLgK=xJfW!<HAVw-8v;AH~wE-%L~YgRko5m>&M&#!z(Z`tXV z-g2jvs|B|1MOwe2fE0WlT#-Ud0t5&UAV7cs0RkfkWFLKxPMf!Iw18}X+j_F#71Or$ zbcj~b<I9e8K)xbH^<AharaISjup-_0BNYXoPbvZd0%d`U2QwWhM;_#As`k)ekm9p4 zVhh=&d#ACmdEB#}W%i3!dNx&^>!RM5VXG_r)WN0O>dHkXtGRAptZp_{ULB$T!Blg_ zpntV8{uHRVkNuDQ?BcEsXDIHf`6+qN*j{n=3b(d(UQuEHm~BmtM(f}2BQh=-o0pwZ zG><GG0RjXF5FkK+009C72oNAZfB*pk1jZLgzmdkl6=lcxTjMM8ib;R~0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV6SCVD<lF+1fm<ukOzl3&&j|K!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyFpfa>|GmWNI7O<2009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+0D;d6{QdiD`0ulf8Ye)2009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs 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 zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly 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 z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72n-?c_wR4--w^dHk^lh$1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNBU2>5>?5)e}Y1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009D13jF>13;(8UP*Vg55FkK+009C72oNAZfB*pk1lkCM-`NfZ zZ7Pw4009C72oNApOJMK8rdE7$2oNAZfWV6a{>;6IFEs%I1PBlyK!5-N0t5&UAV7dX zhXQ-Qm~F0iSih185FkK+009D<0-Fyrn~R&rEfOF=fB=EH1vdXCE{k(_tvdn)2oNAZ zfB*pk1PBlyK!5;&F9_`Y_O-5mK|qfL2oNAZfWWK*2hTaPwyZA#1nvkNd}zck-AUnW z1A+Krg>i$tA4w5Nm%&F`)+PZ01PBlyK!5-N0t5&UAV7e?a02nKSowIkb`(s2009C7 z2oTs4NFH_ewpk}Y;Nt?xXGNG6vV{HRgTlzRT@y$yL=q%<HJ>K?O$iVnK!5-N0t5&U zAV7cs0RjXF5a?eZ|Di8l>A!vz5+Fc;009C7E(>_<xlC8_V0;ylam6e`T@XkvM?Sp} zbI>Dk@9kTNvzLt9SJ*P+roh<(;vkpLt_R~#@%U8O_~8BVsnj+Tm{s8ZTPcn(tCGG5 z5FkK+009C7UKEHQI2(^ob=|nO5!0RW>~nL@eq3j~|9EHhSL4)Y$JL8z7VvDRZ|!de z5+}OTY#e9SaqxM)!BEN2gVz~*E8yDI?5&Hno@>2Kd8)w$>c{Ouv;7p`rjiRp4UV+w zea+IKojAqi*5V+?<B;NbTW_z1vP%ZN6~EN8S9XV`zFtydwOLQtv-#?^#Sn8H{0x%p z57VCq?{5gXP7Uto9U{Uhli@bsxdfrvJ3$K1hFm3s!kC5IN-`#U3L_7?Eos(tQ{csm zyIIfu#TPr0ng9U;1PBlyK!5-N0;3C*d?{Od%y(AlJrBFCR0%E!fe#AA@2L;AuVn%R z2oNAZU?ze1!6qNi)Tv(b>l;=UoG@Mor?~E%J(b920t5&UAV7cs0RjXF5FkK+009C7 zrV&VfS3I8Xb-j0LZ@+Z{1nvtY@4Nc}MIb<c009C72=pV6JnAIVe(F@oO@ZXf=F=p8 zvLSiZlmGz&1PBlyK!5-N0t5&UAV7cs0RmM7lAj{;X_YL35Fl_zAbw-siQ_B*0t5&U zAV8phf%wTMANOCs3QGj?E4!?e9JGf30RjXF5FkK+009C72oNAZfB*pk1PBoLltB1z z3ZLp)vjhkbAV7csfmI+p3#|hz1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs 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 z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk 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 z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs 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 zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkL{e>-#_00000Ajsc(kP9IL1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r l3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*U9J`nIZdj0?a literal 0 HcmV?d00001 -- 1.7.2.5
13 years, 3 months
1
0
0
0
last-svn-commit-879-gb7a40cf optimize influence zone adjacency graph
by Raphael Boissel
--- milena/mln/make/influence_zone_adjacency_graph.hh | 108 ++++++++++++++++++- .../sandbox/raphael/code/my/document/document.hh | 5 +- 2 files changed, 105 insertions(+), 8 deletions(-) diff --git a/milena/mln/make/influence_zone_adjacency_graph.hh b/milena/mln/make/influence_zone_adjacency_graph.hh index 4999dde..3938f42 100644 --- a/milena/mln/make/influence_zone_adjacency_graph.hh +++ b/milena/mln/make/influence_zone_adjacency_graph.hh @@ -115,7 +115,10 @@ namespace mln util::adjacency_matrix<> adj(nlabels.next()); extension::adjust_fill(iz, nbh, 0u); - + + util::graph g; + g.add_vertices(nlabels.next()); + typedef mln_value(I) L; mln_piter(I) p(iz.domain()); mln_niter(N) n(nbh, p); @@ -127,26 +130,91 @@ namespace mln if (iz.domain().has(n)) { L l2 = iz(n); - if (iz(n) != iz((p))) + if (l1 != l2 && !adj.are_adjacent(l1, l2)) + { adj.add(l1, l2); + adj.add(l2, l1); + g.add_edge(l1, l2); + } } } } // Construct graph. + // SLOW + /* for (unsigned i = 0; i < nlabels.next(); ++i) + for (unsigned j = 0; j < i; ++j) + if (adj.are_adjacent(i, j)) + g.add_edge(i, j); */ + trace::exiting("make::impl::generic::influence_zone_adjacency_graph"); + return g; + } + + /// Fastest implementation of make::influence_zone_adjacency_graph. + /// + /// \param[in] iz_ influence zone image. + /// \param[in] nbh_ A neighborhood. + /// \param[in] nlabels number of influence zone in \p iz. + /// + /// \return util::graph Graph based on the adjacency of the influence zones. + // + template <typename I, typename N> + util::graph + influence_zone_adjacency_graph_fastest(const Image<I>& iz_, + const Neighborhood<N>& nbh_, + const mln_value(I)& nlabels) + { + trace::entering("make::impl::generic::influence_zone_adjacency_graph_fastest"); + + internal::influence_zone_adjacency_graph_tests(iz_, nbh_, nlabels); + const I& iz = exact(iz_); + const N& nbh = exact(nbh_); util::graph g; g.add_vertices(nlabels.next()); + util::adjacency_matrix<> adj(nlabels.next()); + extension::adjust_fill(iz, nbh, 0u); + typedef mln_value(I) L; + mln_pixter(const I) p(iz); + //mln_piter(I) p(iz.domain()); + mln_nixter(const I, N) n(p, nbh); + //mln_niter(N) n(nbh, p); + for_all(p) + { + L l1 = p.val(); + for_all(n) + { + + L l2 = n.val(); + if (n.offset() != p.offset()) + { + if(l1 != l2 && !adj.are_adjacent(l1, l2)) + { + if(l2 > 0 ) + { + adj.add(l1, l2); + adj.add(l2, l1); + g.add_edge(l1, l2); + } + } + + } + + } + } + // Construct graph. +/* for (unsigned i = 0; i < nlabels.next(); ++i) for (unsigned j = 0; j < i; ++j) if (adj.are_adjacent(i, j)) g.add_edge(i, j); - - trace::exiting("make::impl::generic::influence_zone_adjacency_graph"); +*/ + trace::exiting("make::impl::generic::influence_zone_adjacency_graph_fastest"); return g; } - + } // end of namespace mln::make::impl::generic + } // end of namespace mln::make::impl @@ -154,13 +222,41 @@ namespace mln namespace internal { + template <typename I, typename N> + inline + util::graph + influence_zone_adjacency_graph_dispatch(metal::false_, + const Image<I>& iz, + const Neighborhood<N>& nbh, + const mln_value(I)& nlabels) + { + return make::impl::generic::influence_zone_adjacency_graph(iz, nbh, nlabels); + } + + template <typename I, typename N> + inline + util::graph + influence_zone_adjacency_graph_dispatch(metal::true_, + const Image<I>& iz, + const Neighborhood<N>& nbh, + const mln_value(I)& nlabels) + { + return make::impl::generic::influence_zone_adjacency_graph_fastest(iz, nbh, nlabels); + } + template <typename I, typename N> + inline util::graph influence_zone_adjacency_graph_dispatch(const Image<I>& iz, const Neighborhood<N>& nbh, const mln_value(I)& nlabels) { - return make::impl::generic::influence_zone_adjacency_graph(iz, nbh, nlabels); + enum { + test = mlc_equal(mln_trait_image_speed(I), + trait::image::speed::fastest)::value + }; + return make::internal::influence_zone_adjacency_graph_dispatch(metal::bool_<test>(), + iz, nbh, nlabels); } } // end of namespace mln::make::internal diff --git a/scribo/sandbox/raphael/code/my/document/document.hh b/scribo/sandbox/raphael/code/my/document/document.hh index 5a18723..b203f20 100644 --- a/scribo/sandbox/raphael/code/my/document/document.hh +++ b/scribo/sandbox/raphael/code/my/document/document.hh @@ -264,9 +264,10 @@ namespace mymln std::cout << " vertical separator(s) : " << CSepV << std::endl; std::cout << " horizontal separator(s) : " << CSepH << std::endl; std::cout << " lines(s) : " << CLine << std::endl; - mymln::debug::save_label_image(img, lines_mark , "outfileline.pbm"); + } - + void debug_save_lines(std::string file) + { mymln::debug::save_label_image(img, lines_mark , file);} vertex_image<point2d,bool> fun_mask_separators() { return fun_mask_(separators_mask); } vertex_image<point2d,bool> fun_mask_containers() -- 1.7.2.5
13 years, 3 months
1
0
0
0
← Newer
1
...
11
12
13
14
15
16
17
18
Older →
Jump to page:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Results per page:
10
25
50
100
200