crsystalreports
TRANSCRIPT
����������� ����������������������������
�������������������dsict.com
http:// www.DSICT.com
��
���������� �����������
�����Login�������SQL Server��� ���NET .VS��
��������������������������������������SQL Server��������������������������������� ��NameSpace�
������������ ��������!����� �"�#���Connect������������SQL Server����$� ���%���
�#�&�$'()�����������������������������������������*�������+���,��������-�.�
��$�/�)�������������������0��-�.�*�������������������&��)����� ��������1!"���#���
-�������2�3����4��/�5����������1!��6��-�.�*"��
• ��������7��������������� ����85�#��&��95���#��:;������� ������������������ �
-���"����string reportPath = Server.MapPath("Report�.rpt ");
• ��������7���������������� �����5����5�#��&��95���#��Application.StartupPath�
-����������� �����"
string RepPath=Application.StartupPath + @"\Report\Report�.rpt";�
��
����������������������� ������������<� �*������=�>�#�?���1!��6�������@AB��#���<C%�D���4����
������E�������������4�����1!�F������<���#���G�=��!�Viewer���������������*�����4������G��6���
����������� �������� "��
• �����������5����������7�������$��/�)�����$ ���%����5���5�5�85�#�&��95��#��
crystalReportViewer.ReportSource��������-�.�*�������"
crystalReportViewer.ReportSource = RepPath;�
��
�����-����.�*�������$�6���E�F��������G����=ConnectionInfo��$���)���-�&�����)�"�H���E�5��
ConnectionInfo���������������I�������������4����������3J>��Connection���2����������KE���
UserID,DataBaseName,Password����������-�.�*���"����������5����������7��
ConnectionInfo connectionInfo = new ConnectionInfo();
connectionInfo.ServerName = "DynamicMethods";
connectionInfo.DatabaseName = "Db�";
connectionInfo.UserID = "sa";
connectionInfo.Password = "������";
�
�
�
�
�
�
����������� ����������������������������
�������������������dsict.com
http:// www.DSICT.com
��
���������� �����������
��������<���#���G�=ConnectionInfo��������crystalReportViewer������������� ������H���*����
-������"����������5����������7��
private void SetLogin(ConnectionInfo connectionInfo)
{
TableLogOnInfos TbLogOnInfos = crystalReportViewer.LogOnInfo;
foreach (TableLogOnInfo TbLogOnInfos in TbLogOnInfos)
{
TbLogOnInfos.ConnectionInfo = connectionInfo;
}
}
�5���5��95��L��#���M��;�������:���C#�-���7��ConnectionInfo connectionInfo = new ConnectionInfo();
connectionInfo.ServerName = "DynamicMethods";
connectionInfo.DatabaseName = "Db�";
connectionInfo.UserID = "sa";
connectionInfo.Password = "������";
string RepPath=Application.StartupPath + @"\Report\Report�.rpt";�
crystalReportViewer.ReportSource = RepPath;
SetLogin(connectionInfo); ----------------------------------------------------------------------
private void SetLogin(ConnectionInfo connectionInfo)
{
TableLogOnInfos TbLogOnInfos = crystalReportViewer.LogOnInfo;
foreach (TableLogOnInfo TbLogOnInfos in TbLogOnInfos)
{
TbLogOnInfos.ConnectionInfo = connectionInfo;
}
}
������D���4���� Page_Load��&���E�"���
��95��L��#��85;�������:���C#��-���7��ConnectionInfo connectionInfo = new ConnectionInfo();
connectionInfo.ServerName = "DynamicMethods";
connectionInfo.DatabaseName = "Db�";
connectionInfo.UserID = "sa";
connectionInfo.Password = "������";
string reportPath = Server.MapPath("Report�.rpt");
crystalReportViewer.ReportSource = RepPath;
SetLogin(connectionInfo); ----------------------------------------------------------------------
private void SetLogin(ConnectionInfo connectionInfo)
{
TableLogOnInfos TbLogOnInfos = crystalReportViewer.LogOnInfo;
foreach (TableLogOnInfo TbLogOnInfos in TbLogOnInfos)
{
TbLogOnInfos.ConnectionInfo = connectionInfo;
}
}
������D���4���� Page_Init��&���E�"��
����������� ����������������������������
�������������������dsict.com
http:// www.DSICT.com
��
���������� �����������
��
��
�����Login�������SQL Server���'� ��SQL Authentication��
����������2N�6��������� ���������$�6E�F����SQL Server��������&��)�O��������������1!��"
������P�������.���F���#��ReportDocument�����-�&��)����� ��"�������������������G5��Q�L������
��'� ����������RS �L��-�������2(��SQL Server����#��������������)� �G5�Q��T�#���
�$�/�)���������*�����������RS �F���G���ConnectionInfo����������� ��"��
��
�P��U�V*�#��ReportDocument-�������2�3����4��/����7��ReportDocument RepDoc=new ReportDocument();��
��
-�������2�3����4��/�5����������1!��6��-�.�*�#��"��
• ��������7��������������� ����85�#��&��95���#��:;������� ������������������ �
-�������"string reportPath = Server.MapPath("Report�.rpt");
• ��������7���������������� �����5����5�#��&��95���#��Application.StartupPath�
���� �-�����������"
string RepPath=Application.StartupPath + @"\Report\Report�.rpt";�
��
����������������������� ������������<� �*������=�>�#�?���1!��6�������@AB��#���<C%�D���4����
�������#���G�=��!������E�������������4�����1!�F������<Viewer�������������������*�����4������G��6���
������ �������� ��������"�������P���������F���#���ReportDocument�������-�������W���������#�
-������������� �" RepDoc.Load(RepPath);
�P��G�=ReportDocument�������Viewer�-�&����<���4�����G��6��"��crystalReportViewer.ReportSource = RepDoc;��
��
��������V����4���.�*�G��3ConnectionInfo����������������H���*�����F����������������R�X�*��'KE�$�6E������
SetLogin-��������"���private void SetLogin(ConnectionInfo connectionInfo,ReportDocument reportdocument)
{
Tables tables = reportdocument.Database.Tables;
����������� ����������������������������
�������������������dsict.com
http:// www.DSICT.com
��
���������� �����������
foreach (CrystalDecisions.CrystalReports.Engine.Table table in tables)
{
TableLogOnInfo TbLogonInfo = table.LogOnInfo;
TbLogonInfo.ConnectionInfo = connectionInfo;
table.ApplyLogOnInfo(TbLogonInfo);
} }
��5���5��95��L��#���M�;�������:���C#-����7��ConnectionInfo connectionInfo = new ConnectionInfo();
ReportDocument RepDoc=new ReportDocument();��connectionInfo.ServerName = "DynamicMethods";
connectionInfo.DatabaseName = "Db�";
connectionInfo.UserID = "sa";
connectionInfo.Password = "������";
string RepPath=Application.StartupPath + @"\Report\Report�.rpt";�
RepDoc.Load(RepPath);�
crystalReportViewer.ReportSource = RepDoc;
SetLogin(connectionInfo, RepDoc); ----------------------------------------------------------------------
private void SetLogin(ConnectionInfo connectionInfo,ReportDocument
reportdocument)
{
Tables tables = reportdocument.Database.Tables;
foreach (CrystalDecisions.CrystalReports.Engine.Table table in
tables)
{
TableLogOnInfo TbLogonInfo = table.LogOnInfo;
TbLogonInfo.ConnectionInfo = connectionInfo;
table.ApplyLogOnInfo(TbLogonInfo);
}
}
��
85��95��L��#��;�������:���C#��-���7��ConnectionInfo connectionInfo = new ConnectionInfo();
ReportDocument RepDoc=new ReportDocument();��connectionInfo.ServerName = "DynamicMethods";
connectionInfo.DatabaseName = "Db�";
connectionInfo.UserID = "sa";
connectionInfo.Password = "������";
string reportPath = Server.MapPath("Report�.rpt");�
RepDoc.Load(RepPath);�
crystalReportViewer.ReportSource = RepDoc;
SetLogin(connectionInfo, RepDoc); ----------------------------------------------------------------------
private void SetLogin(ConnectionInfo connectionInfo,ReportDocument
reportdocument)
{
Tables tables = reportdocument.Database.Tables;
foreach (CrystalDecisions.CrystalReports.Engine.Table table in
tables)
{
TableLogOnInfo TbLogonInfo = table.LogOnInfo;
TbLogonInfo.ConnectionInfo = connectionInfo;
table.ApplyLogOnInfo(TbLogonInfo);
����������� ����������������������������
�������������������dsict.com
http:// www.DSICT.com
��
���������� �����������
} }
��
��
��
�&��������������������
�#�&�����������������#����'� ���4�����G��6��VS.NET�2�3����4��Y������6����
�������;*��'KE�#�&�Z���T����&��������������'��4��/������K[�-���RKX�":��
��'� ���4�����G��6���#�&������������C��G� ���#��VS.NET�������������$ ���%���
����������� �"��ReportDocument RepDoc = new ReportDocument();
string RepPath = Application.StartupPath + "\\CrystalReport�.rpt";
RepDoc.Load(RepPath);
crystalReportViewer�.ReportSource = RepDoc;
//-------------------------------------------
ParameterValues parameterValues = new ParameterValues();
ParameterDiscreteValue parameterDiscreteValue = new
ParameterDiscreteValue();
parameterDiscreteValue.Value = "ParameterValue";
parameterValues.Add(parameterDiscreteValue);
ParameterFieldDefinitions parameterFieldDefinitions =
RepDoc.DataDefinition.ParameterFields;
ParameterFieldDefinition parameterFieldDefinition =
parameterFieldDefinitions["ParameterName"];
parameterFieldDefinition.ApplyCurrentValues(parameterValues);
��
��
��
��
��
��
��
��
��
��
����������� ����������������������������
�������������������dsict.com
http:// www.DSICT.com
��
���������� �����������
��
��
��
��
��
��
��'� ���Z��1!����&�������5���Selection Formula
��������������Z��1�!����&��)����������G��\��#����]����������^��)��5�����L���#����4�����1!��B��
������#�B�����I������)�#�&�����%X;�����#�B����X����3�_��������������:�����#�����������������
�< �*�����F���5����5�������������Z��1!���.���F��Selection Formula������`�W���"��
����������� �����4���� ����D���Z��1!�$)� �#��"��ReportDocument RepDoc = new ReportDocument();
string RepPath = Application.StartupPath + "\\CrystalReport�.rpt";
RepDoc.Load(RepPath);
string SFormula= "{Customer.Code}=����";
RepDoc.DataDefinition.RecordSelectionFormula = SFormula;
crystalReportViewer�.ReportSource = RepDoc;
��
��
����!��G�=�a������#�B�String������7��
��ReportDocument RepDoc = new ReportDocument();
string RepPath = Application.StartupPath + "\\CrystalReport�.rpt";
RepDoc.Load(RepPath);
string SFormula= "{Customer.Code}='����'";
RepDoc.DataDefinition.RecordSelectionFormula = SFormula;
crystalReportViewer�.ReportSource = RepDoc;
��
���#���G����������*��������������#�&�� Select Expert�������� ��4������G��6����)��
���0���B������� ��#���������[�*�#�&�������&����5������"��
��
��
����������� ����������������������������
�������������������dsict.com
http:// www.DSICT.com
��
���������� �����������
��
��
��
��
��
��
��
��
�����Connect��������SubReport�&���
�< �*�����*����1!��B����Crystal Report����O���HE�����bV�����������=�>�
�T��������SubReport������������ ���&"�*��c����L�������4����1!����������,��,��[5
��������������Q����SubReport�������DataBase��������2(��"��
��
��&�`�W���������2=������$ ���%�����0����#��"��
_" ConnectionInfo������-�.�*���"
ConnectionInfo connectionInfo = new ConnectionInfo();
connectionInfo.ServerName = ".";
connectionInfo.DatabaseName = "anbar";
connectionInfo.UserID = "sa";
connectionInfo.Password = "������";
" -�������@AB�����Z��1!��6�
ReportDocument RepDoc = new ReportDocument();
string RepPath = Application.StartupPath + "\\CrystalReport�.rpt";
RepDoc.Load(RepPath);
d" �#��Report�H��*�L���'/��Login-�6���������private void SetLoginMainReport(ConnectionInfo connectionInfo,
ReportDocument reportdocument)
{
Tables tables = reportdocument.Database.Tables;
foreach (CrystalDecisions.CrystalReports.Engine.Table table
in tables)
{
TableLogOnInfo TbLogonInfo = table.LogOnInfo;
TbLogonInfo.ConnectionInfo = connectionInfo;
table.ApplyLogOnInfo(TbLogonInfo);
����������� ����������������������������
�������������������dsict.com
http:// www.DSICT.com
��
���������� �����������
}
}
��
��
��
��
��
��
��
��
e" �#����������F��&�G�=SubReport-�&����`�W���"
private void SetLoginSubReport(ConnectionInfo connectionInfo,
ReportDocument reportdocument)
{ Sections sections = reportdocument.ReportDefinition.Sections;
foreach (Section section in sections)
{
ReportObjects RepObjs = section.ReportObjects;
foreach (ReportObject RepObj in RepObjs)
{ if (RepObj.Kind ==ReportObjectKind.SubreportObject)
{ SubreportObject SubreportObj = (SubreportObject)RepObj;
ReportDocument SubReportDoc = SubreportObj.OpenSubreport(SubreportObj.SubreportName);
SetLoginMainReport(connectionInfo, SubReportDoc);
}
}
}
}
��
�" ����4��/����2��������)�%�F���-�����������)�%��������������H��*�5�G�=
$ �"
ConnectionInfo connectionInfo = new ConnectionInfo();
connectionInfo.ServerName = ".";
connectionInfo.DatabaseName = "anbar";
connectionInfo.UserID = "sa";
connectionInfo.Password = "������";
ReportDocument RepDoc = new ReportDocument();
string RepPath = Application.StartupPath + "\\CrystalReport�.rpt";
RepDoc.Load(RepPath);
SetLoginMainReport(connectionInfo, RepDoc);
SetLoginSubReport(connectionInfo,RepDoc);
crystalReportViewer�.ReportSource=RepDoc;
����������� ����������������������������
�������������������dsict.com
http:// www.DSICT.com
��
���������� �����������
��
��
��
��
��
��
��
��
��
��
�����G�(*���Z��1!���DataSet
����������1!�G�(*�������,����$�6E�F����DataSet�< �*�����F������[�������&��)����T�
DataSet Schema����&��)�`�W����"���������������C�6��4����1!DataBase�����2(���
�< �*�����F���5���Schema�!����`�W���"�#���4����1!������������������������Q�*�
�P�������������������&��95�DataSet�������������� ��"���
�L��a5��#��Connection�a������DataSet Schema���0����#���$)� �-�&��)���
_" �#5���Server Explorer����1!�5������L�'��$ ���Add Connection����
�������8�A���"
��
��
��
��
��
��
��
����������� ����������������������������
�������������������dsict.com
http:// www.DSICT.com
��
���������� �����������
��
" ��&�`�W�������>����4���.�*�Mc "
��
��
��
��
��
��
��
d" ����95��#5����G�=Solution Explorer��#�������5������$ ���L�'�Add����1!�
New Item�8�A���������5���5�#�&��95��#����>����`%����5DataSet�5�8�A�������
�85�#�&��f5��#��XML Schema��8�A������������"�
��
��
��
��
��
��
��
��
��
����������� ����������������������������
�������������������dsict.com
http:// www.DSICT.com
��
���������� �����������
e" �$�6E����G�=Solution Explore�#5����5��������8�A��������>����G5�Q�
Dataset�.xsd��������&��"
��
��
��
��
��
��
��
��
��
��
��
�" ����95��#5����G�=Solution Explorer��#�������5������$ ���L�'�Add���1!��
New Item��>����`%����5�8�A�������Crystal Report�������8�A�������"
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
g" �������� ��������20�������&Wizard��'� ����������1!�Schema$)� �-�&��)�"
����������� ����������������������������
�������������������dsict.com
http:// www.DSICT.com
��
���������� �����������
��
����
��
��
��
��
��
��
��
��
��
��
��
��
��
��
h" �`%��Standard Report Creation Wizard�����$�6EAvailable Data
Source�/��������4�tree���]��������
�Project Data-> ADO.NET DataSet -> YourDataSetName-> Your Table Name���������*���������V�����/�����������&�B������>����`%���(*"��
��
��
��
��
��
��
��
��
��
��
��
i" �#5��Next���������&�B��1������#�V��#�&�`%��*��������L�'���"���� ���*����2=��
���Finish ������������&�B���)������*�"
����������� ����������������������������
�������������������dsict.com
http:// www.DSICT.com
��
���������� �����������
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
j" ����������� ���95��������>�������Mc "
string ConStr = "Data Source=.;Initial Catalog=Anbar;User
ID=sa;Password=������";
SqlConnection SQLCon = new SqlConnection(ConStr);
SqlDataAdapter SQLAdapter = new SqlDataAdapter("SELECT * FROM
TbPersonal", SQLCon);
DataSet� dataset = new DataSet�();
SQLAdapter.Fill(dataset, "TbPersonal");
//------------------------------------------------
ConnectionInfo connectionInfo = new ConnectionInfo();
ReportDocument RepDoc = new ReportDocument();
connectionInfo.ServerName = ".";
connectionInfo.DatabaseName = "anbar";
connectionInfo.UserID = "sa";
connectionInfo.Password = "������";
string RepPath = Application.StartupPath + @"\CrystalReport�.rpt";
RepDoc.Load(RepPath);
RepDoc.SetDataSource(dataset);
crystalReportViewer�.ReportSource = RepDoc;
��
����������� ����������������������������
�������������������dsict.com
http:// www.DSICT.com
��
���������� �����������
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
����Z��1!�G�(*������DataReaderI� �
�������#�&��95���B�����L���5��.NET����P�����DataReader�����������������!���������� ��k*������
������B���k*�������T�$3 DataSet��������"��������������S���&���P��DataReader����)�
������1��IDataReader;�IDataReader����L���)�Interface�������������:��������������������� �"�������F���
��6��������������������-�&��)����$�6EMulti Tier�������������.���F���#���-�������� ��
Solution Explorer�a��������G5���95���������������������W����95����5�����������)�Windows
Application �a��������`5��95����5�Class Libarary���������������"`5��95������Mc�� �
;Class Libarary:�#������������Calss_.cs��6�����"��private const string ConStr = "Data Source=.;Initial
Catalog=Anbar;User ID=sa;Password=������";
public static IDataReader GetTbPersonal()
{
����������� ����������������������������
�������������������dsict.com
http:// www.DSICT.com
��
���������� �����������
SqlConnection SQLCon = new SqlConnection(ConStr);
SQLCon.Open();
SqlCommand SQLCommand = new SqlCommand("SELECT * FROM
TbPersonal", SQLCon);
IDataReader iDataR = SQLCommand.ExecuteReader();
return iDataR;
}
_" �`5��95����#5�����;Class Libarary�:������1!�5��������$�� ���L���'�Build����
��������8�A����"��������������������&�B���#��Build������L��������DLL���$� ���������)�� ��"
��6�DLL��W���������Output�����c6��>�)����;������c����V�":
" �����G5���95���#5��;Application: ����������$� ���L��'���L���5�-���TCrystal
Report�������8�A�������"
d" �������� ��������20�������&Wizard$)� �-�&��)����Z��1!�"��
��
��
��
��
��
��
��
��
e" �`��%��Standard Report Creation Wizard�$�6��E����Available Data
Source��4��/������tree�]��������Node�����F�)�� ����I�Connection �������Q
�������8�A������"
Create New Connection -> ADO.NET
��
��
��
��
��
����������� ����������������������������
�������������������dsict.com
http:// www.DSICT.com
��
���������� �����������
��
��
��
��
��
��
��
�" �`%����G�=ADO.NET�2��%�DLL�������8�A�������"
��
��
��
��
��
��
��
��
��
��
��
��
g" ���'��#5���Finish�������2�3������(*������&�5������L�'��"
����������� ����������������������������
�������������������dsict.com
http:// www.DSICT.com
��
���������� �����������
��
h" ���������������&�B�����20����������������������#�������-����� ��)����������&�'�%�4��/��,���������
���Class$ �������l�A� ��"
SqlCommand SQLCommand = new SqlCommand("SELECT * FROM TbPersonal", SQLCon);
�����$ ���Q�A� ��#�&�'�%���V*���������������D���<)�HE�5���m;���V�ALL�:����+���,�G�=
�����4��/�����������SqlCommand SQLCommand = new SqlCommand("SELECT ID,Name FROM TbPersonal", SQLCon);
��'�%�5�<C%ID,Name�&����O��������#������"��
��
��
��
��
��
��
��
i" ��G5���95���#������������G�=;Application: ����������1!���*���6����������O������
��"
string RepPath = Application.StartupPath + "\\CrystalReport�.rpt";
ReportDocument RepDoc = new ReportDocument();
RepDoc.Load(RepPath);
crystalReportViewer�.ReportSource = RepDoc;
��
����������� ����������������������������
�������������������dsict.com
http:// www.DSICT.com
��
���������� �����������
������������ �������������� ����������� ����������������������
�!��"#����� ��������� �����$% ��&����� ������� ����'"�������� �� ��(�)�*�
�"�����
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
���#�5�Merge Module�#�&�Crystal Reports��
����������)�������#�����&��)����������������Setup��������������+���,������������?*�CR�������������� ��
����������������Merge Module��������������� ���A6���#��&�CR����� ���-������"���#�5���G��=�
��$���-�&��) Merge Module�U'�A��#�&��A6��#�&�CR�"���b�V�����������������Q�*
����������� ����������������������������
�������������������dsict.com
http:// www.DSICT.com
��
���������� �����������
���Merge Module�����)�$��� ����������������bV��5�������k(��L�*���*��4��/����
Business Object�������$%����" ��
��
_" Crystal Reports jn�
��
��
��
��
��
��
��
��
��
��
��
��
" Crystal Reports _�n�
��
��
��
��
��
��
��
��
��
��
d" Crystal Reports __n�
����������� ����������������������������
�������������������dsict.com
http:// www.DSICT.com
��
���������� �����������
��
��
��
��
��
��
��
��
��
e" CR For VS.NET ��
��
��
��
��
��
�" CR For VS.NET ��d
��
��
��
��
��
��
��
��
����������� ����������������������������
�������������������dsict.com
http:// www.DSICT.com
��
���������� �����������
����o�T�����B���4�3J>��k6��#����������VQ��7��http://support.businessobjects.com/downloads/merge_modules.asp
���#�5�Crystal Reports Developer Edtion��
�����������*��;���$6&��D��-���0%�:���������������������p��q�=�K�������0������A[�4�����1!��=�>�q��
�����������������������0���F����������������#��������&�#������K���������$�!�������[5����#�� �Z��1!�#�&
����#����������� �-&�%����7��
_" $6����� T������������T�Z���T5�������r��[���$ �����1&������6��"
" �������$6������A[�#�����1!�s��6��������&;�����������F����s��6���t�1���#��&��1%��`���<C%
���0�����6&":
d" $ �����E5��T�#�� �� ��%"
e" �����D������6������95��$��E"
�" �5"""
����*����������M�������.�����������k���Q�"��
����A6�����������Crystal Reports XI Developer Edition R ���������������5�������������Q���
���������?*���������1����T��A6��F�)T�����A6��F��������*"��
�#��������%V���A6�.NET�1����������!��������E������ �������5�Merge Module���T�#��&�
�#��.NET*��K3�������7��
CrystalReports___maps.msm
CrystalReports___RDC_Designtime.msm
CrystalReports___RDC_License.msm
CrystalReports___RDC_Reportengine.msm
CrystalReports___RDC_Runtime.msm�
��
�B��Z���%�D���4�0�����`��5����"����
��
��
��
��
��
��
����������� ����������������������������
�������������������dsict.com
http:// www.DSICT.com
��
���������� �����������
��
��
��
��
��
��
��
��
������������� ����������������������� ����������������������� ����������������������� ����������� �� �� �� �
� �� �� �� �
����������������������������������������� !�"���#$ ����������������������������� !�"���#$ ����������������������������� !�"���#$ ����������������������������� !�"���#$ ��%����&' ��!������(�������!�)*���%����&' ��!������(�������!�)*���%����&' ��!������(�������!�)*���%����&' ��!������(�������!�)*��Doc��!�������������!�������������!�������������!������������ �� �� �� �
�%���+����&���%���+����&���%���+����&���%���+����&��Doc,�����-���������!������.���/&-����� !�������01�������2 �������,�����-���������!������.���/&-����� !�������01�������2 �������,�����-���������!������.���/&-����� !�������01�������2 �������,�����-���������!������.���/&-����� !�������01�������2 �������3333� �� �� �� �
� �� �� �� �
����������&����4����&����4����&����4����&����4��� �� �� �� �
� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ���������������������������������� �� �� �� �