Bugzilla – Attachment 108652 Details for
Bug 22343
Add configuration options for SMTP servers
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 22343: Adapt controller scripts
Bug-22343-Adapt-controller-scripts.patch (text/plain), 19.79 KB, created by
Kyle M Hall (khall)
on 2020-08-19 15:16:54 UTC
(
hide
)
Description:
Bug 22343: Adapt controller scripts
Filename:
MIME Type:
Creator:
Kyle M Hall (khall)
Created:
2020-08-19 15:16:54 UTC
Size:
19.79 KB
patch
obsolete
>From 42163c598c30e896ae8d32eafb4643463d47c8ae Mon Sep 17 00:00:00 2001 >From: Tomas Cohen Arazi <tomascohen@theke.io> >Date: Thu, 6 Aug 2020 15:07:10 -0300 >Subject: [PATCH] Bug 22343: Adapt controller scripts > >This patch adapts controller scripts that used sendmail. > >Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com> > >Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com> >--- > basket/sendbasket.pl | 89 ++++++++++++++++------------------ > misc/cronjobs/runreport.pl | 10 ++-- > opac/opac-sendbasket.pl | 97 +++++++++++++++++-------------------- > opac/opac-sendshelf.pl | 90 ++++++++++++++-------------------- > virtualshelves/sendshelf.pl | 89 ++++++++++++++-------------------- > 5 files changed, 164 insertions(+), 211 deletions(-) > >diff --git a/basket/sendbasket.pl b/basket/sendbasket.pl >index 2076c425fa..094d37507b 100755 >--- a/basket/sendbasket.pl >+++ b/basket/sendbasket.pl >@@ -20,9 +20,7 @@ use Modern::Perl; > use CGI qw ( -utf8 ); > use Encode qw(encode); > use Carp; >-use Mail::Sendmail; >-use MIME::QuotedPrint; >-use MIME::Base64; >+use Try::Tiny; > > use C4::Biblio; > use C4::Items; >@@ -30,6 +28,7 @@ use C4::Auth; > use C4::Output; > use C4::Templates (); > use Koha::Email; >+use Koha::SMTP::Servers; > use Koha::Token; > > my $query = new CGI; >@@ -44,10 +43,10 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user ( > } > ); > >-my $bib_list = $query->param('bib_list') || ''; >-my $email_add = $query->param('email_add'); >+my $bib_list = $query->param('bib_list') || ''; >+my $email_add = $query->param('email_add'); > >-my $dbh = C4::Context->dbh; >+my $dbh = C4::Context->dbh; > > if ( $email_add ) { > output_and_exit( $query, $cookie, $template, 'wrong_csrf_token' ) >@@ -55,9 +54,7 @@ if ( $email_add ) { > session_id => scalar $query->cookie('CGISESSID'), > token => scalar $query->param('csrf_token'), > }); >- my $email = Koha::Email->new(); >- my %mail = $email->create_message_headers({ to => $email_add }); >- my $comment = $query->param('comment'); >+ my $comment = $query->param('comment'); > > # Since we are already logged in, no need to check credentials again > # when loading a second template. >@@ -109,65 +106,61 @@ if ( $email_add ) { > my $template_res = $template2->output(); > my $body; > >+ my $subject; > # Analysing information and getting mail properties >- if ( $template_res =~ /<SUBJECT>(.*)<END_SUBJECT>/s ) { >- $mail{subject} = $1; >- $mail{subject} =~ s|\n?(.*)\n?|$1|; >- $mail{subject} = encode('MIME-Header',$mail{subject}); >+ if ( $template_res =~ /<SUBJECT>(?<subject>.*)<END_SUBJECT>/s ) { >+ $subject = $+{subject}; >+ $subject =~ s|\n?(.*)\n?|$1|; > } >- else { $mail{'subject'} = "no subject"; } >+ else { >+ $subject = "no subject"; >+ } >+ >+ my $email = Koha::Email->create( >+ { >+ to => $email_add, >+ subject => $subject, >+ } >+ ); > > my $email_header = ""; > if ( $template_res =~ /<HEADER>(.*)<END_HEADER>/s ) { > $email_header = $1; > $email_header =~ s|\n?(.*)\n?|$1|; >- $email_header = encode_qp(Encode::encode("UTF-8", $email_header)); >- } >- >- my $email_file = "basket.txt"; >- if ( $template_res =~ /<FILENAME>(.*)<END_FILENAME>/s ) { >- $email_file = $1; >- $email_file =~ s|\n?(.*)\n?|$1|; >+ $email_header = Encode::encode("UTF-8", $email_header); > } > > if ( $template_res =~ /<MESSAGE>(.*)<END_MESSAGE>/s ) { > $body = $1; > $body =~ s|\n?(.*)\n?|$1|; >- $body = encode_qp(Encode::encode("UTF-8", $body)); >+ $body = Encode::encode("UTF-8", $body); > } > >- my $boundary = "====" . time() . "===="; >- >- # Writing mail >- $mail{'content-type'} = "multipart/mixed; boundary=\"$boundary\""; >- my $isofile = encode_base64(encode("UTF-8", $iso2709)); >- $boundary = '--' . $boundary; >- $mail{body} = <<END_OF_BODY; >-$boundary >-Content-Type: text/plain; charset="utf-8" >-Content-Transfer-Encoding: quoted-printable >- >+ my $THE_body = <<END_OF_BODY; > $email_header > $body >-$boundary >-Content-Type: application/octet-stream; name="basket.iso2709" >-Content-Transfer-Encoding: base64 >-Content-Disposition: attachment; filename="basket.iso2709" >- >-$isofile >-$boundary-- > END_OF_BODY > >- # Sending mail >- if ( sendmail %mail ) { >- # do something if it works.... >- $template->param( SENT => "1" ); >+ $email->text_body( $THE_body ); >+ $email->attach( >+ $iso2709, >+ content_type => 'application/octet-stream', >+ name => 'basket.iso2709', >+ disposition => 'attachment', >+ ); >+ >+ try { >+ my $library = Koha::Patrons->find( $borrowernumber )->library; >+ my $smtp_server = Koha::SMTP::Servers->get_effective_server({ library => $library }); >+ $email->transport( $smtp_server->transport ); >+ $email->send_or_die; >+ $template->param( SENT => "1" ); > } >- else { >- # do something if it doesn't work.... >- carp "Error sending mail: $Mail::Sendmail::error \n"; >+ catch { >+ carp "Error sending mail: $_"; > $template->param( error => 1 ); >- } >+ }; >+ > $template->param( email_add => $email_add ); > output_html_with_http_headers $query, $cookie, $template->output; > } >diff --git a/misc/cronjobs/runreport.pl b/misc/cronjobs/runreport.pl >index 6732afae9c..1f50483190 100755 >--- a/misc/cronjobs/runreport.pl >+++ b/misc/cronjobs/runreport.pl >@@ -318,12 +318,12 @@ foreach my $report_id (@ARGV) { > $message = "<html><head><style>tr:nth-child(2n+1) { background-color: #ccc;}</style></head><body>$message</body></html>"; > $args->{contenttype} = 'text/html'; > } >- my $email = Koha::Email->new(); >- my %mail = $email->create_message_headers($args); >- $mail{Data} = $message; >- $mail{Auth} = { user => $username, pass => $password, method => $method } if $username; >+ my $email = Koha::Email->create( $args ); >+ my %headers = $email->header_pairs; >+ $headers{Data} = $message; >+ $headers{Auth} = { user => $username, pass => $password, method => $method } if $username; > >- my $msg = MIME::Lite->new(%mail); >+ my $msg = MIME::Lite->new(%headers); > > $msg->attach( > Type => "text/$format", >diff --git a/opac/opac-sendbasket.pl b/opac/opac-sendbasket.pl >index d5e6c7fdfd..b6934146e0 100755 >--- a/opac/opac-sendbasket.pl >+++ b/opac/opac-sendbasket.pl >@@ -22,9 +22,7 @@ use Modern::Perl; > use CGI qw ( -utf8 ); > use Encode qw(encode); > use Carp; >-use Mail::Sendmail; >-use MIME::QuotedPrint; >-use MIME::Base64; >+use Try::Tiny; > > use C4::Biblio; > use C4::Items; >@@ -34,6 +32,7 @@ use C4::Members; > use C4::Templates (); > use Koha::Email; > use Koha::Patrons; >+use Koha::SMTP::Servers; > use Koha::Token; > > my $query = new CGI; >@@ -57,7 +56,6 @@ if ( $email_add ) { > session_id => scalar $query->cookie('CGISESSID'), > token => scalar $query->param('csrf_token'), > }); >- my $email = Koha::Email->new(); > my $patron = Koha::Patrons->find( $borrowernumber ); > my $borcat = $patron ? $patron->categorycode : q{}; > my $user_email = $patron->first_valid_email_address >@@ -66,13 +64,6 @@ if ( $email_add ) { > my $email_replyto = $patron->firstname . " " . $patron->surname . " <$user_email>"; > my $comment = $query->param('comment'); > >- # if you want to use the KohaAdmin address as from, that is the default no need to set it >- my %mail = $email->create_message_headers({ >- to => $email_add, >- replyto => $email_replyto, >- }); >- $mail{'X-Abuse-Report'} = C4::Context->preference('KohaAdminEmailAddress'); >- > # Since we are already logged in, no need to check credentials again > # when loading a second template. > my $template2 = C4::Templates::gettemplate( >@@ -129,68 +120,68 @@ if ( $email_add ) { > my $body; > > # Analysing information and getting mail properties >- >- if ( $template_res =~ /<SUBJECT>(.*)<END_SUBJECT>/s ) { >- $mail{subject} = $1; >- $mail{subject} =~ s|\n?(.*)\n?|$1|; >- $mail{subject} = encode('MIME-Header',$mail{subject}); >+ my $subject; >+ if ( $template_res =~ /\<SUBJECT\>(?<subject>.*)\<END_SUBJECT\>/s ) { >+ $subject = $+{subject}; >+ $subject =~ s|\n?(.*)\n?|$1|; >+ } >+ else { >+ $subject = "no subject"; > } >- else { $mail{'subject'} = "no subject"; } >+ >+ # if you want to use the KohaAdmin address as from, that is the default no need to set it >+ my $email = Koha::Email->create({ >+ to => $email_add, >+ replyto => $email_replyto, >+ subject => $subject, >+ }); >+ >+ $email->header( 'X-Abuse-Report' => C4::Context->preference('KohaAdminEmailAddress') ); > > my $email_header = ""; > if ( $template_res =~ /<HEADER>(.*)<END_HEADER>/s ) { > $email_header = $1; > $email_header =~ s|\n?(.*)\n?|$1|; >- $email_header = encode_qp(Encode::encode("UTF-8", $email_header)); >- } >- >- my $email_file = "basket.txt"; >- if ( $template_res =~ /<FILENAME>(.*)<END_FILENAME>/s ) { >- $email_file = $1; >- $email_file =~ s|\n?(.*)\n?|$1|; >+ $email_header = Encode::encode("UTF-8", $email_header); > } > > if ( $template_res =~ /<MESSAGE>(.*)<END_MESSAGE>/s ) { > $body = $1; > $body =~ s|\n?(.*)\n?|$1|; >- $body = encode_qp(Encode::encode("UTF-8", $body)); >+ $body = Encode::encode("UTF-8", $body); > } > >- $mail{body} = $body; >- >- my $boundary = "====" . time() . "===="; >- >- $mail{'content-type'} = "multipart/mixed; boundary=\"$boundary\""; >- my $isofile = encode_base64(encode("UTF-8", $iso2709)); >- $boundary = '--' . $boundary; >- $mail{body} = <<END_OF_BODY; >-$boundary >-MIME-Version: 1.0 >-Content-Type: text/plain; charset="UTF-8" >-Content-Transfer-Encoding: quoted-printable >- >+ my $THE_body = <<END_OF_BODY; > $email_header > $body >-$boundary >-Content-Type: application/octet-stream; name="basket.iso2709" >-Content-Transfer-Encoding: base64 >-Content-Disposition: attachment; filename="basket.iso2709" >- >-$isofile >-$boundary-- > END_OF_BODY > >- # Sending mail (if not empty basket) >- if ( defined($iso2709) && sendmail %mail ) { >- # do something if it works.... >- $template->param( SENT => "1" ); >+ $email->text_body( $THE_body ); >+ $email->attach( >+ $iso2709, >+ content_type => 'application/octet-stream', >+ name => 'basket.iso2709', >+ disposition => 'attachment', >+ ); >+ >+ if ( !defined $iso2709 ) { >+ carp "Error sending mail: empty basket"; >+ $template->param( error => 1 ); > } > else { >- # do something if it doesn't work.... >- carp "Error sending mail: empty basket" if !defined($iso2709); >- carp "Error sending mail: $Mail::Sendmail::error" if $Mail::Sendmail::error; >- $template->param( error => 1 ); >+ try { >+ my $library = $patron->library; >+ my $smtp_server = Koha::SMTP::Servers->get_effective_server({ library => $library }); >+ $email->transport( $smtp_server->transport ); >+ $email->send_or_die; >+ $template->param( SENT => "1" ); >+ } >+ catch { >+ carp "Error sending mail: $_"; >+ $template->param( error => 1 ); >+ }; > } >+ > $template->param( email_add => $email_add ); > output_html_with_http_headers $query, $cookie, $template->output, undef, { force_no_caching => 1 }; > } >diff --git a/opac/opac-sendshelf.pl b/opac/opac-sendshelf.pl >index acbc27e6d2..1a301dd138 100755 >--- a/opac/opac-sendshelf.pl >+++ b/opac/opac-sendshelf.pl >@@ -22,10 +22,8 @@ use Modern::Perl; > use CGI qw ( -utf8 ); > use Encode qw( encode ); > use Carp; >+use Try::Tiny; > >-use Mail::Sendmail; >-use MIME::QuotedPrint; >-use MIME::Base64; > use C4::Auth; > use C4::Biblio; > use C4::Items; >@@ -33,6 +31,7 @@ use C4::Output; > use C4::Members; > use Koha::Email; > use Koha::Patrons; >+use Koha::SMTP::Servers; > use Koha::Virtualshelves; > > my $query = new CGI; >@@ -61,15 +60,8 @@ my $shelf = Koha::Virtualshelves->find( $shelfid ); > if ( $shelf and $shelf->can_be_viewed( $borrowernumber ) ) { > > if ( $email ) { >- my $message = Koha::Email->new(); > my $comment = $query->param('comment'); > >- my %mail = $message->create_message_headers( >- { >- to => $email, >- } >- ); >- > my ( $template2, $borrowernumber, $cookie ) = get_template_and_user( > { > template_name => "opac-sendshelf.tt", >@@ -128,72 +120,64 @@ if ( $email ) { > my $template_res = $template2->output(); > my $body; > >+ my $subject; > # Analysing information and getting mail properties >- if ( $template_res =~ /<SUBJECT>(.*)<END_SUBJECT>/s ) { >- $mail{subject} = $1; >- $mail{subject} =~ s|\n?(.*)\n?|$1|; >+ if ( $template_res =~ /<SUBJECT>(?<subject>.*)<END_SUBJECT>/s ) { >+ $subject = $+{subject}; >+ $subject =~ s|\n?(.*)\n?|$1|; >+ } >+ else { >+ $subject = "no subject"; > } >- else { $mail{'subject'} = "no subject"; } >- $mail{subject} = encode('MIME-Header', $mail{subject}); >+ >+ my $email = Koha::Email->create( >+ { >+ to => $email, >+ subject => $subject, >+ } >+ ); > > my $email_header = ""; > if ( $template_res =~ /<HEADER>(.*)<END_HEADER>/s ) { > $email_header = $1; > $email_header =~ s|\n?(.*)\n?|$1|; >- $email_header = encode_qp(Encode::encode("UTF-8", $email_header)); >- } >- >- my $email_file = "list.txt"; >- if ( $template_res =~ /<FILENAME>(.*)<END_FILENAME>/s ) { >- $email_file = $1; >- $email_file =~ s|\n?(.*)\n?|$1|; >+ $email_header = Encode::encode("UTF-8", $email_header); > } > > if ( $template_res =~ /<MESSAGE>(.*)<END_MESSAGE>/s ) { > $body = $1; > $body =~ s|\n?(.*)\n?|$1|; >- $body = encode_qp(Encode::encode("UTF-8", $body)); >+ $body = Encode::encode("UTF-8", $body); > } > >- my $boundary = "====" . time() . "===="; >- >- # We set and put the multipart content >- $mail{'content-type'} = "multipart/mixed; boundary=\"$boundary\""; >- >- my $isofile = encode_base64(encode("UTF-8", $iso2709)); >- $boundary = '--' . $boundary; >- >- $mail{body} = <<END_OF_BODY; >-$boundary >-MIME-Version: 1.0 >-Content-Type: text/plain; charset="utf-8" >-Content-Transfer-Encoding: quoted-printable >- >+ my $THE_body = <<END_OF_BODY; > $email_header > $body >-$boundary >-Content-Type: application/octet-stream; name="list.iso2709" >-Content-Transfer-Encoding: base64 >-Content-Disposition: attachment; filename="list.iso2709" >- >-$isofile >-$boundary-- > END_OF_BODY > >- # Sending mail >- if ( sendmail %mail ) { >- # do something if it works.... >- $template->param( SENT => "1" ); >+ $email->text_body( $THE_body ); >+ $email->attach( >+ $iso2709, >+ content_type => 'application/octet-stream', >+ name => 'list.iso2709', >+ disposition => 'attachment', >+ ); >+ >+ try { >+ my $library = Koha::Patrons->find( $borrowernumber )->library; >+ my $smtp_server = Koha::SMTP::Servers->get_effective_server({ library => $library }); >+ $email->transport( $smtp_server->transport ); >+ $email->send_or_die; >+ $template->param( SENT => "1" ); > } >- else { >- # do something if it doesn't work.... >- carp "Error sending mail: $Mail::Sendmail::error \n"; >+ catch { >+ carp "Error sending mail: $_"; > $template->param( error => 1 ); >- } >+ }; > > $template->param( > shelfid => $shelfid, >- email => $email, >+ email => $email, > ); > output_html_with_http_headers $query, $cookie, $template->output, undef, { force_no_caching => 1 }; > >diff --git a/virtualshelves/sendshelf.pl b/virtualshelves/sendshelf.pl >index 0103df3e71..d87287b8cf 100755 >--- a/virtualshelves/sendshelf.pl >+++ b/virtualshelves/sendshelf.pl >@@ -22,15 +22,14 @@ use Modern::Perl; > use CGI qw ( -utf8 ); > use Encode qw( encode ); > use Carp; >+use Try::Tiny; > >-use Mail::Sendmail; >-use MIME::QuotedPrint; >-use MIME::Base64; > use C4::Auth; > use C4::Biblio; > use C4::Items; > use C4::Output; > use Koha::Email; >+use Koha::SMTP::Servers; > use Koha::Virtualshelves; > > my $query = new CGI; >@@ -45,19 +44,13 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user( > } > ); > >-my $shelfid = $query->param('shelfid'); >-my $email = $query->param('email'); >+my $shelfid = $query->param('shelfid'); >+my $to_address = $query->param('email'); > > my $dbh = C4::Context->dbh; > >-if ($email) { >+if ($to_address) { > my $comment = $query->param('comment'); >- my $message = Koha::Email->new(); >- my %mail = $message->create_message_headers( >- { >- to => $email >- } >- ); > > my ( $template2, $borrowernumber, $cookie ) = get_template_and_user( > { >@@ -108,68 +101,60 @@ if ($email) { > my $template_res = $template2->output(); > my $body; > >+ my $subject; > # Analysing information and getting mail properties >- if ( $template_res =~ /<SUBJECT>(.*)<END_SUBJECT>/s ) { >- $mail{subject} = $1; >- $mail{subject} =~ s|\n?(.*)\n?|$1|; >+ if ( $template_res =~ /<SUBJECT>(?<subject>.*)<END_SUBJECT>/s ) { >+ $subject = $+{subject}; >+ $subject =~ s|\n?(.*)\n?|$1|; >+ } >+ else { >+ $subject = "no subject"; > } >- else { $mail{'subject'} = "no subject"; } >- $mail{subject} = encode( 'MIME-Header', $mail{subject} ); >+ >+ my $email = Koha::Email->create( >+ { >+ to => $to_address, >+ subject => $subject, >+ } >+ ); > > my $email_header = ""; > if ( $template_res =~ /<HEADER>(.*)<END_HEADER>/s ) { > $email_header = $1; > $email_header =~ s|\n?(.*)\n?|$1|; >- $email_header = encode_qp(Encode::encode("UTF-8", $email_header)); >- } >- >- my $email_file = "list.txt"; >- if ( $template_res =~ /<FILENAME>(.*)<END_FILENAME>/s ) { >- $email_file = $1; >- $email_file =~ s|\n?(.*)\n?|$1|; >+ $email_header = Encode::encode("UTF-8", $email_header); > } > > if ( $template_res =~ /<MESSAGE>(.*)<END_MESSAGE>/s ) { > $body = $1; > $body =~ s|\n?(.*)\n?|$1|; >- $body = encode_qp(Encode::encode("UTF-8", $body)); >+ $body = Encode::encode("UTF-8", $body); > } > >- my $boundary = "====" . time() . "===="; >- >- # We set and put the multipart content >- $mail{'content-type'} = "multipart/mixed; boundary=\"$boundary\""; >- >- my $isofile = encode_base64( encode( "UTF-8", $iso2709 ) ); >- $boundary = '--' . $boundary; >- >- $mail{body} = <<END_OF_BODY; >-$boundary >-Content-Type: text/plain; charset="utf-8" >-Content-Transfer-Encoding: quoted-printable >- >+ my $THE_body = <<END_OF_BODY; > $email_header > $body >-$boundary >-Content-Type: application/octet-stream; name="shelf.iso2709" >-Content-Transfer-Encoding: base64 >-Content-Disposition: attachment; filename="shelf.iso2709" >- >-$isofile >-$boundary-- > END_OF_BODY > >- # Sending mail >- if ( sendmail %mail ) { >+ $email->text_body( $THE_body ); >+ $email->attach( >+ $iso2709, >+ content_type => 'application/octet-stream', >+ name => 'shelf.iso2709', >+ disposition => 'attachment', >+ ); > >- # do something if it works.... >+ try { >+ my $library = Koha::Patrons->find( $borrowernumber )->library; >+ my $smtp_server = Koha::SMTP::Servers->get_effective_server({ library => $library }); >+ $email->transport( $smtp_server->transport ); >+ $email->send_or_die; > $template->param( SENT => "1" ); > } >- else { >- # do something if it doesn't work.... >- carp "Error sending mail: $Mail::Sendmail::error \n"; >+ catch { >+ carp "Error sending mail: $_"; > $template->param( error => 1 ); >- } >+ }; > > $template->param( email => $email ); > output_html_with_http_headers $query, $cookie, $template->output; >-- >2.24.1 (Apple Git-126)
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 22343
:
107598
|
107599
|
107600
|
107601
|
107602
|
107603
|
107604
|
107605
|
107987
|
107988
|
107989
|
107990
|
107991
|
107992
|
107993
|
107994
|
107995
|
107996
|
107997
|
107998
|
107999
|
108009
|
108107
|
108108
|
108109
|
108110
|
108111
|
108112
|
108113
|
108114
|
108115
|
108116
|
108117
|
108118
|
108119
|
108131
|
108132
|
108133
|
108134
|
108135
|
108136
|
108137
|
108138
|
108139
|
108140
|
108141
|
108142
|
108143
|
108529
|
108537
|
108538
|
108539
|
108540
|
108541
|
108542
|
108543
|
108544
|
108545
|
108546
|
108547
|
108548
|
108549
|
108609
|
108638
|
108642
|
108643
|
108644
|
108645
|
108646
|
108647
|
108648
|
108649
|
108650
|
108651
|
108652
|
108653
|
108654
|
108655
|
108656
|
108715
|
108716
|
109003
|
109004
|
109005
|
109006
|
109007
|
109008
|
109009
|
109010
|
109011
|
109012
|
109013
|
109014
|
109015
|
109016
|
109017
|
109018
|
109155
|
109156
|
109157
|
109158
|
109159
|
109160
|
109161
|
109162
|
109163
|
109164
|
109165
|
109166
|
109167
|
109168
|
109169
|
109170
|
109601
|
109602
|
109603
|
109604
|
109605
|
109606
|
109607
|
109608
|
109609
|
109610
|
109611
|
109612
|
109613
|
109614
|
109615
|
109616
|
109723
|
109724
|
109725
|
109726
|
109727
|
109728
|
109729
|
109730
|
109731
|
109732
|
109733
|
109734
|
109735
|
109736
|
109737
|
109738
|
109739
|
109740
|
109787
|
109788
|
111048
|
111087
|
111088
|
111089
|
111090
|
111154
|
111165
|
111166
|
111175
|
111176
|
111213
|
111215
|
111216
|
111442
|
111482
|
113240
|
113827
|
113847