79: lv_print varchar2(10);
80: lv_report_type varchar2(50);
81:
82: BEGIN
83: hr_utility.trace('Entered get_payroll_action_info');
84: open c_payroll_action_info(p_payroll_action_id);
85: fetch c_payroll_action_info into ln_pre_org_id,
86: ln_person_id,
87: ln_asg_set,
91: ln_business_group_id,
92: lv_report_type;
93: close c_payroll_action_info;
94:
95: hr_utility.trace('ld_end_date = ' || to_char(ld_end_date));
96: hr_utility.trace('ld_start_date = ' || to_char(ld_start_date));
97: hr_utility.trace('ln_pre_org_id = ' || to_char(ln_pre_org_id));
98: hr_utility.trace('ln_person_id = ' || to_char(ln_person_id));
99: hr_utility.trace('ln_asg_set = ' || to_char(ln_asg_set));
92: lv_report_type;
93: close c_payroll_action_info;
94:
95: hr_utility.trace('ld_end_date = ' || to_char(ld_end_date));
96: hr_utility.trace('ld_start_date = ' || to_char(ld_start_date));
97: hr_utility.trace('ln_pre_org_id = ' || to_char(ln_pre_org_id));
98: hr_utility.trace('ln_person_id = ' || to_char(ln_person_id));
99: hr_utility.trace('ln_asg_set = ' || to_char(ln_asg_set));
100:
93: close c_payroll_action_info;
94:
95: hr_utility.trace('ld_end_date = ' || to_char(ld_end_date));
96: hr_utility.trace('ld_start_date = ' || to_char(ld_start_date));
97: hr_utility.trace('ln_pre_org_id = ' || to_char(ln_pre_org_id));
98: hr_utility.trace('ln_person_id = ' || to_char(ln_person_id));
99: hr_utility.trace('ln_asg_set = ' || to_char(ln_asg_set));
100:
101: p_end_date := ld_end_date;
94:
95: hr_utility.trace('ld_end_date = ' || to_char(ld_end_date));
96: hr_utility.trace('ld_start_date = ' || to_char(ld_start_date));
97: hr_utility.trace('ln_pre_org_id = ' || to_char(ln_pre_org_id));
98: hr_utility.trace('ln_person_id = ' || to_char(ln_person_id));
99: hr_utility.trace('ln_asg_set = ' || to_char(ln_asg_set));
100:
101: p_end_date := ld_end_date;
102: p_start_date := ld_start_date;
95: hr_utility.trace('ld_end_date = ' || to_char(ld_end_date));
96: hr_utility.trace('ld_start_date = ' || to_char(ld_start_date));
97: hr_utility.trace('ln_pre_org_id = ' || to_char(ln_pre_org_id));
98: hr_utility.trace('ln_person_id = ' || to_char(ln_person_id));
99: hr_utility.trace('ln_asg_set = ' || to_char(ln_asg_set));
100:
101: p_end_date := ld_end_date;
102: p_start_date := ld_start_date;
103: p_business_group_id := ln_business_group_id;
106: p_asg_set := ln_asg_set;
107: p_print := lv_print;
108: p_report_type := lv_report_type;
109:
110: hr_utility.trace('Leaving get_payroll_action_info');
111:
112: EXCEPTION
113: when others then
114: hr_utility.trace('Error in ' || gv_procedure_name ||
110: hr_utility.trace('Leaving get_payroll_action_info');
111:
112: EXCEPTION
113: when others then
114: hr_utility.trace('Error in ' || gv_procedure_name ||
115: to_char(sqlcode) || '-' || sqlerrm);
116: raise hr_utility.hr_error;
117:
118: END get_payroll_action_info;
112: EXCEPTION
113: when others then
114: hr_utility.trace('Error in ' || gv_procedure_name ||
115: to_char(sqlcode) || '-' || sqlerrm);
116: raise hr_utility.hr_error;
117:
118: END get_payroll_action_info;
119:
120:
142: ln_year number;
143: lv_report_type varchar2(50);
144:
145: BEGIN
146: hr_utility.trace('Entered range_cursor');
147: hr_utility.trace('p_payroll_action_id = ' ||
148: to_char(p_payroll_action_id));
149:
150: get_payroll_action_info(p_payroll_action_id => p_payroll_action_id
143: lv_report_type varchar2(50);
144:
145: BEGIN
146: hr_utility.trace('Entered range_cursor');
147: hr_utility.trace('p_payroll_action_id = ' ||
148: to_char(p_payroll_action_id));
149:
150: get_payroll_action_info(p_payroll_action_id => p_payroll_action_id
151: ,p_start_date => ld_start_date
166: from per_assignments_f asg
167: where person_id = ' || ln_person_id ||
168: ' and :payroll_action_id > 0';
169:
170: hr_utility.trace('Range for person_id not null');
171:
172: elsif ln_asg_set is not null then
173:
174: lv_sql_string :=
180: and asgset.include_or_exclude = ''I''
181: and :payroll_action_id > 0
182: order by paf.person_id ';
183:
184: hr_utility.trace('Range for asg_set not null');
185:
186: elsif ln_pre_org_id is not NULL then
187:
188: lv_sql_string :=
221:
222: end if;
223:
224: p_sqlstr := lv_sql_string;
225: hr_utility.trace('p_sqlstr = ' ||p_sqlstr);
226:
227: END range_cursor;
228:
229:
466: fetch get_warning_dtls_for_ee into lv_full_name,
467: lv_employee_number;
468: close get_warning_dtls_for_ee;
469:
470: hr_utility.trace('get_latest_rl2_amend_dtls not found');
471: hr_utility.trace('p_person_id :'||to_char(p_person_id));
472:
473: if lv_ppr_report_type = 'PYRL2PRAMEND' then
474: lv_record_name := 'RL2 Amend Paper Report';
467: lv_employee_number;
468: close get_warning_dtls_for_ee;
469:
470: hr_utility.trace('get_latest_rl2_amend_dtls not found');
471: hr_utility.trace('p_person_id :'||to_char(p_person_id));
472:
473: if lv_ppr_report_type = 'PYRL2PRAMEND' then
474: lv_record_name := 'RL2 Amend Paper Report';
475: else
497:
498: lv_prov_amend_flag := 'N';
499: fetch c_get_prov_amend_flag into lv_prov_amend_flag;
500:
501: hr_utility.trace('lv_prov_amend_flag : '||lv_prov_amend_flag);
502:
503: if c_get_prov_amend_flag%FOUND then
504:
505: if lv_prov_amend_flag = 'Y' then
514: fetch get_yepp_pact_id into ln_yepp_pact_id;
515: close get_yepp_pact_id;
516:
517: /* Create an assignment action for this person */
518: hr_utility.trace('get_latest_rl2_amend_dtls found ');
519: hr_utility.trace('Report Type: '||lv_report_type);
520:
521: select pay_assignment_actions_s.nextval
522: into ln_rl2_amend_reg_asg_action
515: close get_yepp_pact_id;
516:
517: /* Create an assignment action for this person */
518: hr_utility.trace('get_latest_rl2_amend_dtls found ');
519: hr_utility.trace('Report Type: '||lv_report_type);
520:
521: select pay_assignment_actions_s.nextval
522: into ln_rl2_amend_reg_asg_action
523: from dual;
521: select pay_assignment_actions_s.nextval
522: into ln_rl2_amend_reg_asg_action
523: from dual;
524:
525: hr_utility.trace('New RL2 Amend Action = ' ||
526: to_char(ln_rl2_amend_reg_asg_action));
527:
528: /* Insert into pay_assignment_actions. */
529: hr_nonrun_asact.insact(ln_rl2_amend_reg_asg_action,
550: update pay_assignment_actions aa
551: set aa.serial_number = ln_serial_number
552: where aa.assignment_action_id = ln_rl2_amend_reg_asg_action;
553:
554: hr_utility.trace('Province: '||substr(ln_serial_number,1,2));
555: hr_utility.trace('Archiver Asg Act :'||substr(ln_serial_number,3,14));
556: hr_utility.trace('Archiver PactID :'||substr(ln_serial_number,17,14));
557:
558: hr_utility.trace('Locking Action'||ln_rl2_amend_reg_asg_action);
551: set aa.serial_number = ln_serial_number
552: where aa.assignment_action_id = ln_rl2_amend_reg_asg_action;
553:
554: hr_utility.trace('Province: '||substr(ln_serial_number,1,2));
555: hr_utility.trace('Archiver Asg Act :'||substr(ln_serial_number,3,14));
556: hr_utility.trace('Archiver PactID :'||substr(ln_serial_number,17,14));
557:
558: hr_utility.trace('Locking Action'||ln_rl2_amend_reg_asg_action);
559: hr_utility.trace('ln_serial_number :' || ln_serial_number);
552: where aa.assignment_action_id = ln_rl2_amend_reg_asg_action;
553:
554: hr_utility.trace('Province: '||substr(ln_serial_number,1,2));
555: hr_utility.trace('Archiver Asg Act :'||substr(ln_serial_number,3,14));
556: hr_utility.trace('Archiver PactID :'||substr(ln_serial_number,17,14));
557:
558: hr_utility.trace('Locking Action'||ln_rl2_amend_reg_asg_action);
559: hr_utility.trace('ln_serial_number :' || ln_serial_number);
560:
554: hr_utility.trace('Province: '||substr(ln_serial_number,1,2));
555: hr_utility.trace('Archiver Asg Act :'||substr(ln_serial_number,3,14));
556: hr_utility.trace('Archiver PactID :'||substr(ln_serial_number,17,14));
557:
558: hr_utility.trace('Locking Action'||ln_rl2_amend_reg_asg_action);
559: hr_utility.trace('ln_serial_number :' || ln_serial_number);
560:
561: end if; -- lv_prov_amend_flag = 'Y'
562:
555: hr_utility.trace('Archiver Asg Act :'||substr(ln_serial_number,3,14));
556: hr_utility.trace('Archiver PactID :'||substr(ln_serial_number,17,14));
557:
558: hr_utility.trace('Locking Action'||ln_rl2_amend_reg_asg_action);
559: hr_utility.trace('ln_serial_number :' || ln_serial_number);
560:
561: end if; -- lv_prov_amend_flag = 'Y'
562:
563: end if; -- c_get_prov_amend_flag%FOUND
582: ln_primary_assignment_id := 0;
583: ln_asg_act_to_lock := 0;
584: ln_pre_id_null := 0;
585:
586: hr_utility.trace('lv_print :'||lv_print);
587:
588: loop
589:
590: fetch get_all_rl2_amend_dtls into lv_report_type
592: ,ln_asg_act_to_lock
593: ,ln_pre_id_null;
594:
595: if get_all_rl2_amend_dtls%notfound then
596: hr_utility.trace('get_all_rl2_amend_dtls not found ');
597: exit;
598: end if;
599:
600: open c_get_prov_amend_flag(ln_asg_act_to_lock);
601:
602: lv_prov_amend_flag := 'N';
603: fetch c_get_prov_amend_flag into lv_prov_amend_flag;
604:
605: hr_utility.trace('lv_prov_amend_flag : '||lv_prov_amend_flag);
606:
607: if c_get_prov_amend_flag%FOUND then
608:
609: if lv_prov_amend_flag = 'Y' then
617: ld_end_date);
618: fetch get_yepp_pact_id into ln_yepp_pact_id;
619: close get_yepp_pact_id;
620:
621: hr_utility.trace('get_all_rl2_amend_dtls found ');
622: hr_utility.trace('Report Type: '||lv_report_type);
623:
624: /* Create an assignment action for this person */
625:
618: fetch get_yepp_pact_id into ln_yepp_pact_id;
619: close get_yepp_pact_id;
620:
621: hr_utility.trace('get_all_rl2_amend_dtls found ');
622: hr_utility.trace('Report Type: '||lv_report_type);
623:
624: /* Create an assignment action for this person */
625:
626: select pay_assignment_actions_s.nextval
626: select pay_assignment_actions_s.nextval
627: into ln_rl2_amend_reg_asg_action
628: from dual;
629:
630: hr_utility.trace('New RL2 Amend Action = ' || ln_rl2_amend_reg_asg_action);
631:
632: /* Insert into pay_assignment_actions. */
633: hr_nonrun_asact.insact(ln_rl2_amend_reg_asg_action,
634: ln_primary_assignment_id,
650: ln_serial_number := 'QC'||
651: lpad(to_char(ln_asg_act_to_lock),14,0)||
652: lpad(to_char(ln_yepp_pact_id),14,0);
653:
654: hr_utility.trace('Province: '||substr(ln_serial_number,1,2));
655: hr_utility.trace('Archiver Asg Act :'||substr(ln_serial_number,3,14));
656: hr_utility.trace('Archiver PactID :'||substr(ln_serial_number,17,14));
657:
658: update pay_assignment_actions aa
651: lpad(to_char(ln_asg_act_to_lock),14,0)||
652: lpad(to_char(ln_yepp_pact_id),14,0);
653:
654: hr_utility.trace('Province: '||substr(ln_serial_number,1,2));
655: hr_utility.trace('Archiver Asg Act :'||substr(ln_serial_number,3,14));
656: hr_utility.trace('Archiver PactID :'||substr(ln_serial_number,17,14));
657:
658: update pay_assignment_actions aa
659: set aa.serial_number = ln_serial_number
652: lpad(to_char(ln_yepp_pact_id),14,0);
653:
654: hr_utility.trace('Province: '||substr(ln_serial_number,1,2));
655: hr_utility.trace('Archiver Asg Act :'||substr(ln_serial_number,3,14));
656: hr_utility.trace('Archiver PactID :'||substr(ln_serial_number,17,14));
657:
658: update pay_assignment_actions aa
659: set aa.serial_number = ln_serial_number
660: where aa.assignment_action_id = ln_rl2_amend_reg_asg_action;
671:
672: END action_creation;
673:
674: BEGIN
675: hr_utility.trace('Entered action_creation ');
676: hr_utility.trace('p_payroll_action_id = '|| to_char(p_payroll_action_id));
677: hr_utility.trace('p_start_person_id ='|| to_char(p_start_person_id));
678: hr_utility.trace('p_end_person_id = '|| to_char(p_end_person_id));
679: hr_utility.trace('p_chunk = ' || to_char(p_chunk));
672: END action_creation;
673:
674: BEGIN
675: hr_utility.trace('Entered action_creation ');
676: hr_utility.trace('p_payroll_action_id = '|| to_char(p_payroll_action_id));
677: hr_utility.trace('p_start_person_id ='|| to_char(p_start_person_id));
678: hr_utility.trace('p_end_person_id = '|| to_char(p_end_person_id));
679: hr_utility.trace('p_chunk = ' || to_char(p_chunk));
680:
673:
674: BEGIN
675: hr_utility.trace('Entered action_creation ');
676: hr_utility.trace('p_payroll_action_id = '|| to_char(p_payroll_action_id));
677: hr_utility.trace('p_start_person_id ='|| to_char(p_start_person_id));
678: hr_utility.trace('p_end_person_id = '|| to_char(p_end_person_id));
679: hr_utility.trace('p_chunk = ' || to_char(p_chunk));
680:
681: get_payroll_action_info(p_payroll_action_id => p_payroll_action_id
674: BEGIN
675: hr_utility.trace('Entered action_creation ');
676: hr_utility.trace('p_payroll_action_id = '|| to_char(p_payroll_action_id));
677: hr_utility.trace('p_start_person_id ='|| to_char(p_start_person_id));
678: hr_utility.trace('p_end_person_id = '|| to_char(p_end_person_id));
679: hr_utility.trace('p_chunk = ' || to_char(p_chunk));
680:
681: get_payroll_action_info(p_payroll_action_id => p_payroll_action_id
682: ,p_start_date => ld_start_date
675: hr_utility.trace('Entered action_creation ');
676: hr_utility.trace('p_payroll_action_id = '|| to_char(p_payroll_action_id));
677: hr_utility.trace('p_start_person_id ='|| to_char(p_start_person_id));
678: hr_utility.trace('p_end_person_id = '|| to_char(p_end_person_id));
679: hr_utility.trace('p_chunk = ' || to_char(p_chunk));
680:
681: get_payroll_action_info(p_payroll_action_id => p_payroll_action_id
682: ,p_start_date => ld_start_date
683: ,p_end_date => ld_end_date
687: ,p_asg_set => ln_asg_set
688: ,p_print => lv_print
689: ,p_report_type => lv_ppr_report_type);
690:
691: hr_utility.trace('lv_ppr_report_type: '||lv_ppr_report_type);
692:
693: ln_pre_org_id := ln_pre_parameter;
694:
695: /* PERSON ID IS NOT NULL */
697: action_creation(p_start_person_id);
698:
699: elsif ln_asg_set is not null then
700:
701: hr_utility.trace('Entered Asg Set logic');
702: hr_utility.trace('Asg Set ='||to_char(ln_asg_set));
703: hr_utility.trace('p_start_person_id ='||to_char(p_start_person_id));
704: hr_utility.trace('End Person ='||to_char(p_end_person_id));
705:
698:
699: elsif ln_asg_set is not null then
700:
701: hr_utility.trace('Entered Asg Set logic');
702: hr_utility.trace('Asg Set ='||to_char(ln_asg_set));
703: hr_utility.trace('p_start_person_id ='||to_char(p_start_person_id));
704: hr_utility.trace('End Person ='||to_char(p_end_person_id));
705:
706: open c_selected_asg_set (p_start_person_id
699: elsif ln_asg_set is not null then
700:
701: hr_utility.trace('Entered Asg Set logic');
702: hr_utility.trace('Asg Set ='||to_char(ln_asg_set));
703: hr_utility.trace('p_start_person_id ='||to_char(p_start_person_id));
704: hr_utility.trace('End Person ='||to_char(p_end_person_id));
705:
706: open c_selected_asg_set (p_start_person_id
707: ,p_end_person_id
700:
701: hr_utility.trace('Entered Asg Set logic');
702: hr_utility.trace('Asg Set ='||to_char(ln_asg_set));
703: hr_utility.trace('p_start_person_id ='||to_char(p_start_person_id));
704: hr_utility.trace('End Person ='||to_char(p_end_person_id));
705:
706: open c_selected_asg_set (p_start_person_id
707: ,p_end_person_id
708: ,ln_asg_set
706: open c_selected_asg_set (p_start_person_id
707: ,p_end_person_id
708: ,ln_asg_set
709: ,ld_end_date);
710: hr_utility.trace('Opened cusor c_selected_asg_set');
711: loop
712: fetch c_selected_asg_set into ln_set_person_id;
713: if c_selected_asg_set%notfound then
714: hr_utility.trace('c_selected_asg_set not found ');
710: hr_utility.trace('Opened cusor c_selected_asg_set');
711: loop
712: fetch c_selected_asg_set into ln_set_person_id;
713: if c_selected_asg_set%notfound then
714: hr_utility.trace('c_selected_asg_set not found ');
715: hr_utility.trace('No Person found for reporting in this chunk');
716: exit;
717: end if;
718:
711: loop
712: fetch c_selected_asg_set into ln_set_person_id;
713: if c_selected_asg_set%notfound then
714: hr_utility.trace('c_selected_asg_set not found ');
715: hr_utility.trace('No Person found for reporting in this chunk');
716: exit;
717: end if;
718:
719: action_creation(ln_set_person_id);
722: close c_selected_asg_set;
723:
724: elsif ln_pre_org_id is not null then
725:
726: hr_utility.trace('Entered PRE not null logic');
727: hr_utility.trace('PRE Organization Id ='||to_char(ln_pre_org_id));
728: hr_utility.trace('p_start_person_id ='||to_char(p_start_person_id));
729: hr_utility.trace('End Person ='||to_char(p_end_person_id));
730:
723:
724: elsif ln_pre_org_id is not null then
725:
726: hr_utility.trace('Entered PRE not null logic');
727: hr_utility.trace('PRE Organization Id ='||to_char(ln_pre_org_id));
728: hr_utility.trace('p_start_person_id ='||to_char(p_start_person_id));
729: hr_utility.trace('End Person ='||to_char(p_end_person_id));
730:
731: open c_all_asg (ln_business_group_id,
724: elsif ln_pre_org_id is not null then
725:
726: hr_utility.trace('Entered PRE not null logic');
727: hr_utility.trace('PRE Organization Id ='||to_char(ln_pre_org_id));
728: hr_utility.trace('p_start_person_id ='||to_char(p_start_person_id));
729: hr_utility.trace('End Person ='||to_char(p_end_person_id));
730:
731: open c_all_asg (ln_business_group_id,
732: ln_pre_org_id,
725:
726: hr_utility.trace('Entered PRE not null logic');
727: hr_utility.trace('PRE Organization Id ='||to_char(ln_pre_org_id));
728: hr_utility.trace('p_start_person_id ='||to_char(p_start_person_id));
729: hr_utility.trace('End Person ='||to_char(p_end_person_id));
730:
731: open c_all_asg (ln_business_group_id,
732: ln_pre_org_id,
733: ld_end_date,
732: ln_pre_org_id,
733: ld_end_date,
734: p_start_person_id,
735: p_end_person_id);
736: hr_utility.trace('Opened cusor c_all_asg');
737:
738: loop
739: fetch c_all_asg into ln_set_person_id;
740: if c_all_asg%notfound then
737:
738: loop
739: fetch c_all_asg into ln_set_person_id;
740: if c_all_asg%notfound then
741: hr_utility.trace('c_all_asg not found ');
742: hr_utility.trace('No Person found for reporting in this chunk');
743: exit;
744: end if;
745:
738: loop
739: fetch c_all_asg into ln_set_person_id;
740: if c_all_asg%notfound then
741: hr_utility.trace('c_all_asg not found ');
742: hr_utility.trace('No Person found for reporting in this chunk');
743: exit;
744: end if;
745:
746: action_creation(ln_set_person_id);
749: close c_all_asg;
750:
751: else
752:
753: hr_utility.trace('Entered All PRE logic');
754:
755: open c_all_pres(ln_business_group_id,
756: ld_end_date);
757:
759:
760: fetch c_all_pres into ln_pre_id;
761:
762: if c_all_pres%NOTFOUND then
763: hr_utility.trace('c_all_pres NOT FOUND');
764: exit;
765: end if;
766:
767: hr_utility.trace('PRE ='||to_char(ln_pre_id));
763: hr_utility.trace('c_all_pres NOT FOUND');
764: exit;
765: end if;
766:
767: hr_utility.trace('PRE ='||to_char(ln_pre_id));
768: hr_utility.trace('p_start_person_id ='||to_char(p_start_person_id));
769: hr_utility.trace('End Person ='||to_char(p_end_person_id));
770:
771: open c_all_asg (ln_business_group_id,
764: exit;
765: end if;
766:
767: hr_utility.trace('PRE ='||to_char(ln_pre_id));
768: hr_utility.trace('p_start_person_id ='||to_char(p_start_person_id));
769: hr_utility.trace('End Person ='||to_char(p_end_person_id));
770:
771: open c_all_asg (ln_business_group_id,
772: ln_pre_id,
765: end if;
766:
767: hr_utility.trace('PRE ='||to_char(ln_pre_id));
768: hr_utility.trace('p_start_person_id ='||to_char(p_start_person_id));
769: hr_utility.trace('End Person ='||to_char(p_end_person_id));
770:
771: open c_all_asg (ln_business_group_id,
772: ln_pre_id,
773: ld_end_date,
772: ln_pre_id,
773: ld_end_date,
774: p_start_person_id,
775: p_end_person_id);
776: hr_utility.trace('Opened cursor c_all_asg');
777:
778: loop -- c_all_asg
779: fetch c_all_asg into ln_set_person_id;
780: if c_all_asg%notfound then
777:
778: loop -- c_all_asg
779: fetch c_all_asg into ln_set_person_id;
780: if c_all_asg%notfound then
781: hr_utility.trace('c_all_asg not found ');
782: hr_utility.trace('No Person found for reporting in this chunk');
783: exit;
784: end if;
785:
778: loop -- c_all_asg
779: fetch c_all_asg into ln_set_person_id;
780: if c_all_asg%notfound then
781: hr_utility.trace('c_all_asg not found ');
782: hr_utility.trace('No Person found for reporting in this chunk');
783: exit;
784: end if;
785:
786: ln_pre_org_id := ln_pre_id;
807: ) is
808:
809: begin
810:
811: hr_utility.trace('Beginning of the sort_action cursor');
812:
813: sqlstr := 'select paa1.rowid /* we need the row id of the assignment actions that are created by PYUGEN */
814: from hr_all_organization_units hou1,
815: hr_all_organization_units hou,
850: ,ppf.last_name,ppf.first_name';
851:
852:
853: len := length(sqlstr); -- return the length of the string.
854: hr_utility.trace('End of the sort_Action cursor');
855:
856: end sort_action;
857:
858:
887: return par_value;
888:
889: END get_parameter;
890: Begin
891: /* hr_utility.trace_on(null,'RL2AMEND_REG'); */
892: null;
893:
894:
895: end pay_ca_eoy_rl2_amend_reg;