diff --git a/src/Spd.Manager.Screening/ApplicationContract.cs b/src/Spd.Manager.Screening/ApplicationContract.cs index 31bf9b317..32284f5f9 100644 --- a/src/Spd.Manager.Screening/ApplicationContract.cs +++ b/src/Spd.Manager.Screening/ApplicationContract.cs @@ -266,7 +266,8 @@ public enum ApplicationPortalStatusCode ClosedNoConsent, CancelledByApplicant, CancelledByOrganization, - RefundRequested + RefundRequested, + Completed } public enum ApplicationPortalStatisticsCode diff --git a/src/Spd.Manager.Screening/ApplicationManager.cs b/src/Spd.Manager.Screening/ApplicationManager.cs index 3375ed118..74d401b2d 100644 --- a/src/Spd.Manager.Screening/ApplicationManager.cs +++ b/src/Spd.Manager.Screening/ApplicationManager.cs @@ -158,9 +158,8 @@ await _delegateRepository.ManageAsync( }, ct); } - //update status : if psso or volunteer, go directly to submitted - if ((request.ParentOrgId == SpdConstants.BcGovOrgId || request.ApplicationCreateRequest.ServiceType == ServiceTypeCode.CRRP_VOLUNTEER) - && request.ApplicationCreateRequest.HaveVerifiedIdentity == true) + //update status + if (IfSubmittedDirectly(request.ApplicationCreateRequest.ServiceType, request.ApplicationCreateRequest.PayeeType, request.ApplicationCreateRequest.HaveVerifiedIdentity ?? false)) { await _applicationRepository.UpdateAsync( new UpdateCmd() @@ -231,7 +230,7 @@ public async Task Handle(ApplicationStatisticsQue public async Task Handle(VerifyIdentityCommand request, CancellationToken ct) { - OrgQryResult org = (OrgQryResult)await _orgRepository.QueryOrgAsync(new OrgByIdentifierQry(request.OrgId), ct); + ApplicationResult app = await _applicationRepository.QueryApplicationAsync(new ApplicationQry(request.ApplicationId), ct); UpdateCmd updateCmd = new() { OrgId = request.OrgId, @@ -245,18 +244,14 @@ public async Task Handle(VerifyIdentityCommand request, CancellationToken } else { - //if org is psso or if org is volunteer crrp, set application status to submitted. - if (org.OrgResult.ParentOrgId == SpdConstants.BcGovOrgId || - org.OrgResult.Id == SpdConstants.BcGovOrgId || - org.OrgResult.ServiceTypes.Any(t => t == ServiceTypeEnum.CRRP_VOLUNTEER || t == ServiceTypeEnum.PSSO || t == ServiceTypeEnum.PSSO_VS || t == ServiceTypeEnum.MCFD || t == ServiceTypeEnum.PE_CRC || t == ServiceTypeEnum.PE_CRC_VS)) //is PSSO + Shared.PayerPreferenceTypeCode? payerPreference = app.PayeeType == null ? null : Enum.Parse(app.PayeeType.Value.ToString()); + if (IfSubmittedDirectly(Enum.Parse(app.ServiceType.Value.ToString()), payerPreference, true)) { updateCmd.Status = ApplicationStatusEnum.Submitted; } else { - //if org is non-volunteer crrp - ApplicationResult result = await _applicationRepository.QueryApplicationAsync(new ApplicationQry(request.ApplicationId), ct); - if (result.PaidOn != null) //already paid + if (app.PaidOn != null) //already paid updateCmd.Status = ApplicationStatusEnum.Submitted; else //not paid updateCmd.Status = ApplicationStatusEnum.PaymentPending; @@ -454,9 +449,8 @@ public async Task Handle(ApplicantApplicationCreateCo result.CreateSuccess = true; } - //update status : if psso or volunteer, go directly to submitted - if ((cmd.ParentOrgId == SpdConstants.BcGovOrgId || command.ApplicationCreateRequest.ServiceType == ServiceTypeCode.CRRP_VOLUNTEER) - && command.ApplicationCreateRequest.HaveVerifiedIdentity == true) + //update status + if (IfSubmittedDirectly(command.ApplicationCreateRequest.ServiceType, command.ApplicationCreateRequest.PayeeType, command.ApplicationCreateRequest.HaveVerifiedIdentity ?? false)) { await _applicationRepository.UpdateAsync( new UpdateCmd() @@ -628,7 +622,27 @@ await retryIfNoFound.Execute(async () => } return new FileResponse(); } + #endregion - #endregion applicant-applications + private static bool IfSubmittedDirectly(ServiceTypeCode serviceType, Shared.PayerPreferenceTypeCode? payerPreference, bool IdentityVerified) + { + bool noNeedToPay = false; + if (serviceType == ServiceTypeCode.CRRP_VOLUNTEER) noNeedToPay = true; + if (serviceType == ServiceTypeCode.PSSO) noNeedToPay = true; + if (serviceType == ServiceTypeCode.MCFD) noNeedToPay = true; + if (serviceType == ServiceTypeCode.PSSO_VS) noNeedToPay = true; + if (serviceType == ServiceTypeCode.PE_CRC || serviceType == ServiceTypeCode.PE_CRC_VS) + { + if (payerPreference == Shared.PayerPreferenceTypeCode.Organization || payerPreference == null) noNeedToPay = true; + else noNeedToPay = false; + } + if (serviceType == ServiceTypeCode.CRRP_EMPLOYEE) noNeedToPay = false; + if (noNeedToPay) + { + if (IdentityVerified) return true; + } + + return false; + } } } \ No newline at end of file diff --git a/src/Spd.Manager.Screening/ApplicationMappings.cs b/src/Spd.Manager.Screening/ApplicationMappings.cs index 1992a1782..e878054c8 100644 --- a/src/Spd.Manager.Screening/ApplicationMappings.cs +++ b/src/Spd.Manager.Screening/ApplicationMappings.cs @@ -10,6 +10,8 @@ using Spd.Resource.Repository.Incident; using Spd.Resource.Repository.PortalUser; using Spd.Utilities.Shared; +using Spd.Utilities.Shared.Exceptions; +using System.Net; namespace Spd.Manager.Screening { @@ -19,7 +21,8 @@ public ApplicationMappings() { _ = CreateMap() .ForMember(d => d.ApplicationInvites, opt => opt.MapFrom(s => s.ApplicationInviteCreateRequests)); - CreateMap(); + CreateMap() + .ForMember(d => d.PayeeType, opt => opt.MapFrom(s => GetPayerPreferenceTypeCode(s))); CreateMap(); CreateMap(); CreateMap(); @@ -126,5 +129,25 @@ public ApplicationMappings() return SpdConstants.BcGovOrgId; return null; } + + private Resource.Repository.PayerPreferenceTypeCode? GetPayerPreferenceTypeCode(ApplicationInviteCreateRequest inviteRequest) + { + if (inviteRequest.ServiceType == ServiceTypeCode.CRRP_EMPLOYEE) + { + if (inviteRequest.PayeeType == null) throw new ApiException(HttpStatusCode.BadRequest, "Payee type is required."); + return Enum.Parse(inviteRequest.PayeeType.Value.ToString()); + } + + if (inviteRequest.ServiceType == ServiceTypeCode.CRRP_VOLUNTEER) return null; + if (inviteRequest.ServiceType == ServiceTypeCode.PSSO || inviteRequest.ServiceType == ServiceTypeCode.PSSO_VS || inviteRequest.ServiceType == ServiceTypeCode.MCFD) + return null; + if (inviteRequest.ServiceType == ServiceTypeCode.PE_CRC || inviteRequest.ServiceType == ServiceTypeCode.PE_CRC_VS) + { + if (inviteRequest.PayeeType == Shared.PayerPreferenceTypeCode.Applicant) return Resource.Repository.PayerPreferenceTypeCode.Applicant; + if (inviteRequest.PayeeType == Shared.PayerPreferenceTypeCode.Organization) return null; + if (inviteRequest.PayeeType == null) throw new ApiException(HttpStatusCode.BadRequest, "Payee type is required."); + } + return null; + } } } diff --git a/src/Spd.Presentation.Screening/ClientApp/src/app/api/fn/payment/api-orgs-org-id-applications-application-id-payment-link-post.ts b/src/Spd.Presentation.Screening/ClientApp/src/app/api/fn/payment/api-orgs-org-id-applications-application-id-payment-link-post.ts index c74d593f3..7b095e973 100644 --- a/src/Spd.Presentation.Screening/ClientApp/src/app/api/fn/payment/api-orgs-org-id-applications-application-id-payment-link-post.ts +++ b/src/Spd.Presentation.Screening/ClientApp/src/app/api/fn/payment/api-orgs-org-id-applications-application-id-payment-link-post.ts @@ -10,6 +10,10 @@ import { PaymentLinkCreateRequest } from '../../models/payment-link-create-reque import { PaymentLinkResponse } from '../../models/payment-link-response'; export interface ApiOrgsOrgIdApplicationsApplicationIdPaymentLinkPost$Params { + +/** + * organization id + */ orgId: string; applicationId: string; diff --git a/src/Spd.Presentation.Screening/ClientApp/src/app/api/models/application-portal-status-code.ts b/src/Spd.Presentation.Screening/ClientApp/src/app/api/models/application-portal-status-code.ts index 23d386aec..6bd994a6c 100644 --- a/src/Spd.Presentation.Screening/ClientApp/src/app/api/models/application-portal-status-code.ts +++ b/src/Spd.Presentation.Screening/ClientApp/src/app/api/models/application-portal-status-code.ts @@ -15,5 +15,6 @@ export enum ApplicationPortalStatusCode { ClosedNoConsent = 'ClosedNoConsent', CancelledByApplicant = 'CancelledByApplicant', CancelledByOrganization = 'CancelledByOrganization', - RefundRequested = 'RefundRequested' + RefundRequested = 'RefundRequested', + Completed = 'Completed' } diff --git a/src/Spd.Presentation.Screening/ClientApp/src/app/core/code-types/model-desc.models.ts b/src/Spd.Presentation.Screening/ClientApp/src/app/core/code-types/model-desc.models.ts index bc72e8309..9df84514c 100644 --- a/src/Spd.Presentation.Screening/ClientApp/src/app/core/code-types/model-desc.models.ts +++ b/src/Spd.Presentation.Screening/ClientApp/src/app/core/code-types/model-desc.models.ts @@ -144,6 +144,7 @@ export const ApplicationPortalStatusTypes: SelectOptions[] = [ extra: 'The application is in risk assessment', }, { desc: 'Incomplete', code: ApplicationPortalStatusCode.Incomplete, extra: 'Incomplete application received' }, + { desc: 'Completed', code: ApplicationPortalStatusCode.Completed }, { desc: 'Completed - Cleared', code: ApplicationPortalStatusCode.CompletedCleared, diff --git a/src/Spd.Presentation.Screening/ClientApp/src/app/core/constants/constants.ts b/src/Spd.Presentation.Screening/ClientApp/src/app/core/constants/constants.ts index b238a1064..f51aa641c 100644 --- a/src/Spd.Presentation.Screening/ClientApp/src/app/core/constants/constants.ts +++ b/src/Spd.Presentation.Screening/ClientApp/src/app/core/constants/constants.ts @@ -57,8 +57,7 @@ export const SPD_CONSTANTS = { peCrcApplication: 'https://www2.gov.bc.ca/gov/content/home', mcfdApplication: 'https://www2.gov.bc.ca/gov/content/governments/organizational-structure/ministries-organizations/ministries/children-and-family-development', - pssoCheck: - 'https://www2.gov.bc.ca/gov/content/careers-myhr/hiring-managers/process/extend-offer/security-screening/about', + pssoCheck: 'https://www2.gov.bc.ca/gov/content/careers-myhr', }, message: { pssoVsWarning: 'I confirm I am submitting a combined check on behalf of the Centralized Services Hub (CSH) team.', diff --git a/src/Spd.Presentation.Screening/ClientApp/src/app/modules/crrpa-portal/crrpa.component.ts b/src/Spd.Presentation.Screening/ClientApp/src/app/modules/crrpa-portal/crrpa.component.ts index 934afe741..b2e39aaf3 100644 --- a/src/Spd.Presentation.Screening/ClientApp/src/app/modules/crrpa-portal/crrpa.component.ts +++ b/src/Spd.Presentation.Screening/ClientApp/src/app/modules/crrpa-portal/crrpa.component.ts @@ -179,6 +179,8 @@ export class CrrpaComponent implements OnInit { }); orgData.isCrrpa = true; + orgData.notPssoOrPecrc = true; + orgData.bcGovEmployeeIdShow = false; orgData.performPaymentProcess = false; //default orgData.readonlyTombstone = false; // default } diff --git a/src/Spd.Presentation.Screening/ClientApp/src/app/modules/pssoa-portal/pssoa.component.ts b/src/Spd.Presentation.Screening/ClientApp/src/app/modules/pssoa-portal/pssoa.component.ts index 39b41bfad..80129137c 100644 --- a/src/Spd.Presentation.Screening/ClientApp/src/app/modules/pssoa-portal/pssoa.component.ts +++ b/src/Spd.Presentation.Screening/ClientApp/src/app/modules/pssoa-portal/pssoa.component.ts @@ -5,8 +5,15 @@ import { Component, OnInit, ViewChild } from '@angular/core'; import { MatStepper } from '@angular/material/stepper'; import { Router } from '@angular/router'; import { distinctUntilChanged } from 'rxjs'; -import { ApplicantAppCreateRequest, ApplicationCreateResponse } from 'src/app/api/models'; -import { ApplicantService } from 'src/app/api/services'; +import { + ApplicantAppCreateRequest, + ApplicationCreateResponse, + PaymentLinkCreateRequest, + PaymentLinkResponse, + PaymentMethodCode, + ServiceTypeCode, +} from 'src/app/api/models'; +import { ApplicantService, PaymentService } from 'src/app/api/services'; import { AppRoutes } from 'src/app/app-routing.module'; import { PortalTypeCode } from 'src/app/core/code-types/portal-type.model'; import { SPD_CONSTANTS } from 'src/app/core/constants/constants'; @@ -144,6 +151,7 @@ export class PssoaComponent implements OnInit { private authProcessService: AuthProcessService, private authUserService: AuthUserBcscService, private applicantService: ApplicantService, + private paymentService: PaymentService, private location: Location ) {} @@ -170,6 +178,10 @@ export class PssoaComponent implements OnInit { }); orgData.isCrrpa = false; + orgData.notPssoOrPecrc = + orgData.serviceType != ServiceTypeCode.Psso && orgData.serviceType != ServiceTypeCode.PeCrc; + orgData.bcGovEmployeeIdShow = + orgData.serviceType != ServiceTypeCode.PeCrc && orgData.serviceType != ServiceTypeCode.PeCrcVs; orgData.performPaymentProcess = false; // does not apply to psso orgData.readonlyTombstone = false; // default orgData.shareableCrcExists = false; // does not apply to psso @@ -338,20 +350,50 @@ export class PssoaComponent implements OnInit { this.applicantService .apiApplicantsScreeningsPost({ body }) .pipe() - .subscribe((_res: ApplicationCreateResponse) => { - this.stepper.next(); + .subscribe((res: ApplicationCreateResponse) => { + if (this.orgData!.performPaymentProcess) { + this.payNow(res.applicationId!); + } else { + this.stepper.next(); + } }); } else { body.haveVerifiedIdentity = false; this.applicantService .apiApplicantsScreeningsAnonymousPost({ body }) .pipe() - .subscribe((_res: ApplicationCreateResponse) => { - this.stepper.next(); + .subscribe((res: ApplicationCreateResponse) => { + if (this.orgData!.performPaymentProcess) { + this.payNow(res.applicationId!); + } else { + this.stepper.next(); + } }); } } + private payNow(applicationId: string): void { + if (this.authenticationService.isLoggedIn()) { + this.authProcessService.refreshToken(); + } + + const body: PaymentLinkCreateRequest = { + applicationId: applicationId, + paymentMethod: PaymentMethodCode.CreditCard, + description: 'Payment for Invitation', + }; + this.paymentService + .apiCrrpaPaymentLinkPost({ + body, + }) + .pipe() + .subscribe((res: PaymentLinkResponse) => { + if (res.paymentLinkUrl) { + window.location.assign(res.paymentLinkUrl); + } + }); + } + private assignApplicantUserInfoData(orgData: AppInviteOrgData | null): void { const bcscUserInfoProfile = this.authUserService.bcscUserInfoProfile; diff --git a/src/Spd.Presentation.Screening/ClientApp/src/app/modules/security-screening-portal/components/security-screening-detail.component.ts b/src/Spd.Presentation.Screening/ClientApp/src/app/modules/security-screening-portal/components/security-screening-detail.component.ts index 6b3dd4901..d22e5a849 100644 --- a/src/Spd.Presentation.Screening/ClientApp/src/app/modules/security-screening-portal/components/security-screening-detail.component.ts +++ b/src/Spd.Presentation.Screening/ClientApp/src/app/modules/security-screening-portal/components/security-screening-detail.component.ts @@ -11,6 +11,7 @@ import { CaseSubStatusCode, FileTemplateTypeCode, FileTypeCode, + PayerPreferenceTypeCode, ServiceTypeCode, } from 'src/app/api/models'; import { ApplicantService, PaymentService } from 'src/app/api/services'; @@ -253,7 +254,7 @@ export class SecurityScreeningDetailComponent implements OnInit, AfterViewInit { if (applicationData) { this.loadList(applicationData); this.showDownloadReceipt = - applicationData.serviceType === ServiceTypeCode.CrrpEmployee && + applicationData.payeeType === PayerPreferenceTypeCode.Applicant && applicationData.status != ApplicationPortalStatusCode.AwaitingPayment; } else { this.router.navigate([SecurityScreeningRoutes.path(SecurityScreeningRoutes.CRC_LIST)]); diff --git a/src/Spd.Presentation.Screening/ClientApp/src/app/shared/components/manual-submission-common.component.ts b/src/Spd.Presentation.Screening/ClientApp/src/app/shared/components/manual-submission-common.component.ts index e67c662ae..77bcd3a9a 100644 --- a/src/Spd.Presentation.Screening/ClientApp/src/app/shared/components/manual-submission-common.component.ts +++ b/src/Spd.Presentation.Screening/ClientApp/src/app/shared/components/manual-submission-common.component.ts @@ -16,7 +16,13 @@ import { import { ApplicationService } from 'src/app/api/services'; import { AppRoutes } from 'src/app/app-routing.module'; import { ApplicationOriginTypeCode } from 'src/app/core/code-types/application-origin-type.model'; -import { GenderTypes, ScreeningTypes, SelectOptions, ServiceTypes } from 'src/app/core/code-types/model-desc.models'; +import { + GenderTypes, + PayerPreferenceTypes, + ScreeningTypes, + SelectOptions, + ServiceTypes, +} from 'src/app/core/code-types/model-desc.models'; import { PortalTypeCode } from 'src/app/core/code-types/portal-type.model'; import { SPD_CONSTANTS } from 'src/app/core/constants/constants'; import { AuthUserBceidService } from 'src/app/core/services/auth-user-bceid.service'; @@ -232,7 +238,11 @@ export interface ManualSubmissionBody {
Service Type - + {{ srv.desc }} @@ -240,6 +250,18 @@ export interface ManualSubmissionBody { This is required
+ +
+ + Paid by + + + {{ payer.desc }} + + + This is required + +
{{ pssoVsWarning }} @@ -497,8 +519,10 @@ export class ManualSubmissionCommonComponent implements OnInit { showScreeningType = false; screeningTypes = ScreeningTypes; screeningTypeCodes = ScreeningTypeCode; + payerPreferenceTypes = PayerPreferenceTypes; showServiceType = false; + showPaidBy = false; serviceTypeDefault: ServiceTypeCode | null = null; serviceTypes: null | SelectOptions[] = []; @@ -523,6 +547,7 @@ export class ManualSubmissionCommonComponent implements OnInit { jobTitle: new FormControl('', [FormControlValidators.required]), screeningType: new FormControl(''), serviceType: new FormControl(this.serviceTypeDefault), + payeeType: new FormControl(''), contractedCompanyName: new FormControl(''), employeeId: new FormControl(''), orgId: new FormControl(null), @@ -543,6 +568,9 @@ export class ManualSubmissionCommonComponent implements OnInit { validators: [ FormGroupValidators.conditionalRequiredValidator('screeningType', (_form) => this.showScreeningType ?? false), FormGroupValidators.conditionalRequiredValidator('serviceType', (_form) => this.showServiceType ?? false), + FormGroupValidators.conditionalRequiredValidator('payeeType', (_form) => + this.isPeCrc(_form.get('serviceType')?.value ?? false) + ), FormGroupValidators.conditionalDefaultRequiredValidator( 'emailAddress', (_form) => this.portal == PortalTypeCode.Crrp @@ -636,6 +664,10 @@ export class ManualSubmissionCommonComponent implements OnInit { this.populateServiceTypes(event.value); } + onChangeServiceType(event: MatSelectChange): void { + this.showPaidBy = this.isPeCrc(event.value); + } + onCancel(): void { this.resetForm(); } @@ -805,6 +837,10 @@ export class ManualSubmissionCommonComponent implements OnInit { return [ScreeningTypeCode.Contractor, ScreeningTypeCode.Licensee].includes(this.screeningType.value); } + private isPeCrc(serviceTypeCode: ServiceTypeCode): boolean { + return serviceTypeCode === ServiceTypeCode.PeCrc || serviceTypeCode === ServiceTypeCode.PeCrcVs; + } + private populateServiceTypes(orgId: string | null | undefined) { if (!orgId) { this.serviceTypes = []; diff --git a/src/Spd.Presentation.Screening/ClientApp/src/app/shared/components/screening-application-steps/sa-step-eligibility.component.ts b/src/Spd.Presentation.Screening/ClientApp/src/app/shared/components/screening-application-steps/sa-step-eligibility.component.ts index ecf90b7a8..9ec49f899 100644 --- a/src/Spd.Presentation.Screening/ClientApp/src/app/shared/components/screening-application-steps/sa-step-eligibility.component.ts +++ b/src/Spd.Presentation.Screening/ClientApp/src/app/shared/components/screening-application-steps/sa-step-eligibility.component.ts @@ -7,11 +7,7 @@ import { AppInviteOrgData } from './screening-application.model'; template: ` - +
diff --git a/src/Spd.Presentation.Screening/ClientApp/src/app/shared/components/screening-application-steps/sa-step-terms-and-cond.component.ts b/src/Spd.Presentation.Screening/ClientApp/src/app/shared/components/screening-application-steps/sa-step-terms-and-cond.component.ts index c11267078..19fead160 100644 --- a/src/Spd.Presentation.Screening/ClientApp/src/app/shared/components/screening-application-steps/sa-step-terms-and-cond.component.ts +++ b/src/Spd.Presentation.Screening/ClientApp/src/app/shared/components/screening-application-steps/sa-step-terms-and-cond.component.ts @@ -131,7 +131,9 @@ export class SaStepTermsAndCondComponent { const isValid = this.dirtyForm(formNumber); if (!isValid) return; - if (this.orgData?.isCrrpa) { + if (!this.orgData) return; + + if (this.orgData.isCrrpa) { const declarationData = this.declarationComponent.getDataToSave(); if (declarationData.agreeToShareCrc) { this.orgData.performPaymentProcess = false; @@ -139,10 +141,13 @@ export class SaStepTermsAndCondComponent { } else { // SPDBT-2938 - Volunteer Service Requiring Payment - Add check for service type this.orgData.performPaymentProcess = - this.orgData?.payeeType == PayerPreferenceTypeCode.Applicant && - this.orgData?.serviceType != ServiceTypeCode.CrrpVolunteer; + this.orgData.payeeType == PayerPreferenceTypeCode.Applicant && + this.orgData.serviceType != ServiceTypeCode.CrrpVolunteer; this.agreeToShareCrc = false; } + } else { + // SPDBT-2949 - Allow PSSO to pay when payeeType is Applicant + this.orgData.performPaymentProcess = this.orgData.payeeType == PayerPreferenceTypeCode.Applicant; } this.childstepper.next(); diff --git a/src/Spd.Presentation.Screening/ClientApp/src/app/shared/components/screening-application-steps/screening-application.model.ts b/src/Spd.Presentation.Screening/ClientApp/src/app/shared/components/screening-application-steps/screening-application.model.ts index e34f07082..8f3602806 100644 --- a/src/Spd.Presentation.Screening/ClientApp/src/app/shared/components/screening-application-steps/screening-application.model.ts +++ b/src/Spd.Presentation.Screening/ClientApp/src/app/shared/components/screening-application-steps/screening-application.model.ts @@ -14,6 +14,8 @@ export interface AppInviteOrgData extends ApplicantAppCreateRequest { orgAddress?: string | null; // for display readonlyTombstone?: boolean | null; // logic for screens - SPDBT-1272 isCrrpa: boolean; + notPssoOrPecrc: boolean; + bcGovEmployeeIdShow: boolean; performPaymentProcess?: boolean | null; previousNameFlag?: boolean | null; shareableCrcExists?: boolean | null; diff --git a/src/Spd.Presentation.Screening/ClientApp/src/app/shared/components/screening-application-steps/step-components/sa-checklist.component.ts b/src/Spd.Presentation.Screening/ClientApp/src/app/shared/components/screening-application-steps/step-components/sa-checklist.component.ts index b93c188c1..98779c09e 100644 --- a/src/Spd.Presentation.Screening/ClientApp/src/app/shared/components/screening-application-steps/step-components/sa-checklist.component.ts +++ b/src/Spd.Presentation.Screening/ClientApp/src/app/shared/components/screening-application-steps/step-components/sa-checklist.component.ts @@ -23,7 +23,7 @@ import { PayerPreferenceTypeCode } from 'src/app/api/models'; set it up now and return to this application when you have completed that process. - +
  • A method of payment (Visa, Mastercard, American Express, Visa Debit, Mastercard Debit). The criminal record fee is non-refundable. @@ -47,5 +47,4 @@ export class SaChecklistComponent { payerPreferenceTypeCodes = PayerPreferenceTypeCode; @Input() payeeType: PayerPreferenceTypeCode | undefined = undefined; - @Input() isCrrpa = false; } diff --git a/src/Spd.Presentation.Screening/ClientApp/src/app/shared/components/screening-application-steps/step-components/sa-consent-to-crc.component.ts b/src/Spd.Presentation.Screening/ClientApp/src/app/shared/components/screening-application-steps/step-components/sa-consent-to-crc.component.ts index 2f8311121..8458bfb6a 100644 --- a/src/Spd.Presentation.Screening/ClientApp/src/app/shared/components/screening-application-steps/step-components/sa-consent-to-crc.component.ts +++ b/src/Spd.Presentation.Screening/ClientApp/src/app/shared/components/screening-application-steps/step-components/sa-consent-to-crc.component.ts @@ -1,4 +1,4 @@ -import { Component, Input } from '@angular/core'; +import { Component, Input, OnInit } from '@angular/core'; import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms'; import { BooleanTypeCode } from 'src/app/api/models'; import { AuthProcessService } from 'src/app/core/services/auth-process.service'; @@ -126,7 +126,7 @@ import { AppInviteOrgData, CrcFormStepComponent } from '../screening-application `, ], }) -export class SaConsentToCrcComponent implements CrcFormStepComponent { +export class SaConsentToCrcComponent implements OnInit, CrcFormStepComponent { matcher = new FormErrorStateMatcher(); private _orgData!: AppInviteOrgData | null; diff --git a/src/Spd.Presentation.Screening/ClientApp/src/app/shared/components/screening-application-steps/step-components/sa-consent-to-release-of-info.component.ts b/src/Spd.Presentation.Screening/ClientApp/src/app/shared/components/screening-application-steps/step-components/sa-consent-to-release-of-info.component.ts index 071a886c3..d9c82e340 100644 --- a/src/Spd.Presentation.Screening/ClientApp/src/app/shared/components/screening-application-steps/step-components/sa-consent-to-release-of-info.component.ts +++ b/src/Spd.Presentation.Screening/ClientApp/src/app/shared/components/screening-application-steps/step-components/sa-consent-to-release-of-info.component.ts @@ -1,4 +1,4 @@ -import { Component, Input } from '@angular/core'; +import { Component, Input, OnInit } from '@angular/core'; import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms'; import { ServiceTypeCode } from 'src/app/api/models'; import { AuthProcessService } from 'src/app/core/services/auth-process.service'; @@ -38,6 +38,13 @@ import { AppInviteOrgData, CrcFormStepComponent } from '../screening-application (checkboxChanged)="onCheckboxChange()" > + + + +
  • @@ -73,7 +80,7 @@ import { AppInviteOrgData, CrcFormStepComponent } from '../screening-application `, ], }) -export class SaConsentToReleaseOfInfoComponent implements CrcFormStepComponent { +export class SaConsentToReleaseOfInfoComponent implements OnInit, CrcFormStepComponent { matcher = new FormErrorStateMatcher(); // crrpa flow uses agreeToCriminalCheck, agreeToVulnerableSectorSearch, check1, check2, check3, check4, check5, check6 // pssoa flow uses agreeToCriminalCheck, check1, check2, check3 @@ -91,7 +98,7 @@ export class SaConsentToReleaseOfInfoComponent implements CrcFormStepComponent { check1: new FormControl(null, [Validators.requiredTrue]), check2: new FormControl(null, [Validators.requiredTrue]), check3: new FormControl(null, [Validators.requiredTrue]), - check4: new FormControl(null, isMcfd || value?.isCrrpa ? [Validators.requiredTrue] : []), + check4: new FormControl(null, isMcfd || this.isPeCrc || value?.isCrrpa ? [Validators.requiredTrue] : []), check5: new FormControl(null, isMcfd || value?.isCrrpa ? [Validators.requiredTrue] : []), check6: new FormControl(null, value?.isCrrpa ? [Validators.requiredTrue] : []), dateSigned: new FormControl(null, [Validators.required]), @@ -138,14 +145,12 @@ export class SaConsentToReleaseOfInfoComponent implements CrcFormStepComponent { onCheckboxChange(): void { const data = this.form.value; + let isValid = false; + if (this.isMcfd) { - if (data.agreeToCriminalCheck && data.check1 && data.check2 && data.check3 && data.check4 && data.check5) { - this.form.controls['dateSigned'].setValue(this.utilService.getDateString(new Date())); - } else { - this.form.controls['dateSigned'].setValue(''); - } + isValid = data.agreeToCriminalCheck && data.check1 && data.check2 && data.check3 && data.check4 && data.check5; } else if (this.isCrrpa) { - if ( + isValid = data.agreeToCriminalCheck && data.agreeToVulnerableSectorSearch && data.check1 && @@ -153,18 +158,17 @@ export class SaConsentToReleaseOfInfoComponent implements CrcFormStepComponent { data.check3 && data.check4 && data.check5 && - data.check6 - ) { - this.form.controls['dateSigned'].setValue(this.utilService.getDateString(new Date())); - } else { - this.form.controls['dateSigned'].setValue(''); - } + data.check6; + } else if (this.isPeCrc) { + isValid = data.agreeToCriminalCheck && data.check1 && data.check2 && data.check3 && data.check4; } else { - if (data.agreeToCriminalCheck && data.check1 && data.check2 && data.check3) { - this.form.controls['dateSigned'].setValue(this.utilService.getDateString(new Date())); - } else { - this.form.controls['dateSigned'].setValue(''); - } + isValid = data.agreeToCriminalCheck && data.check1 && data.check2 && data.check3; + } + + if (isValid) { + this.form.controls['dateSigned'].setValue(this.utilService.getDateString(new Date())); + } else { + this.form.controls['dateSigned'].setValue(''); } } @@ -177,9 +181,12 @@ export class SaConsentToReleaseOfInfoComponent implements CrcFormStepComponent { return this.orgData?.serviceType === ServiceTypeCode.Mcfd; } get isCrrpa(): boolean { - return !this.isMcfd && this.orgData!.isCrrpa; + return !this.isMcfd && !this.isPeCrc && this.orgData!.isCrrpa; } get isPssoa(): boolean { - return !this.isMcfd && !this.orgData!.isCrrpa; + return !this.isMcfd && !this.isPeCrc && !this.orgData!.isCrrpa; + } + get isPeCrc(): boolean { + return this.orgData?.serviceType === ServiceTypeCode.PeCrc || this.orgData?.serviceType === ServiceTypeCode.PeCrcVs; } } diff --git a/src/Spd.Presentation.Screening/ClientApp/src/app/shared/components/screening-application-steps/step-components/sa-consent-to-release-pecrc.component.ts b/src/Spd.Presentation.Screening/ClientApp/src/app/shared/components/screening-application-steps/step-components/sa-consent-to-release-pecrc.component.ts new file mode 100644 index 000000000..21b104fbf --- /dev/null +++ b/src/Spd.Presentation.Screening/ClientApp/src/app/shared/components/screening-application-steps/step-components/sa-consent-to-release-pecrc.component.ts @@ -0,0 +1,144 @@ +import { Component, EventEmitter, Input, Output } from '@angular/core'; +import { FormGroup } from '@angular/forms'; + +@Component({ + selector: 'app-sa-consent-to-release-pecrc', + template: ` +
    + PERMISSION, WAIVER and RELEASE
    +
    + + As the recipient of a conditional offer by the hiring organization identified in the Letter of Agreement (LOA) + between of the Ministry of Public Safety and Solicitor General (PSSG) and the hiring organization (Prospective + Employer), I understand that my Prospective Employer requires a criminal record check to inform their decision + to hire me for the position applied for. I also understand that if I am hired for the position, a further + criminal record check may be required at yearly intervals specified under the policy of my organization + (Current Employer) to verify my ongoing suitability for the position (“Prospective Employer”, together with + “Current Employer”, hereinafter referred to as my “Employer”). Under the LOA, my Employer is engaging PSSG’s + Security Programs Division (SPD) to conduct the criminal record check and, if an Incident as defined below is + identified, to prepare for my Employer a report summarizing SPD’s findings and a recommendation as to my + hiring, or my ongoing suitability for the position, as the case may be. + + This is required +
    +
    + + Pursuant to Section 8(1) of the Privacy Act of Canada, and Sections 32(b) and 33(2)(c) of the British Columbia + Freedom of Information and Protection of Privacy Act (FOIPPA), by my signature below I hereby consent to a + check for records of criminal convictions, outstanding charges, and/or arrests (each, an Incident). Other + documents or information in the custody of the police, the courts, corrections, or crown counsel may be + accessed in order to assess any information found as a result of the criminal record check. + + This is required +
    +
    + + Pursuant to the terms of the LOA between PSSG (SPD) and my Employer, I authorize the release of this + information to SPD for the purposes of making a recommendation regarding my suitability for a position with my + Employer. As may be required, I authorize SPD to release a copy of this consent to any third party deemed + necessary in order to collect or verify any third-party information required for assessing my suitability. I + understand that the final decision respecting my hiring, or ongoing suitability for a current position, as the + case may be, is not made by SPD, but by my Employer. I understand that my consent to a criminal record check + will be retained on file, as may be required or relied upon pursuant to the policy of my Employer. + + This is required +
    +
    + + I certify that I have accurately disclosed the information requested to undergo this criminal record check + process. I understand that if any Incident is identified as part of my criminal record check, I may be asked + to provide further particulars. I hereby certify that any information that I will provide in this regard is + complete, honest, and accurate to the best of my knowledge. + + This is required +
    +
    + + I hereby release and forever discharge (i) His Majesty the King in Right of Canada, the Royal Canadian Mounted + Police, their members, employees, agents and assigns, and (ii) His Majesty the King in Right of the Province + of British Columbia and all employees and agents of the Province of British Columbia from any and all actions, + causes of actions, claims, complaints and demands for any form of relief, damages, loss or injury which may + hereafter be sustained by me, howsoever arising from the above authorized disclosure of information and waive + all rights thereto. + + This is required +
    + Collection Notice +

    + The Security Programs Division (SPD) will collect your personal information for the purpose of fulfilling the + criminal record check requirements set out by the policy of your Employer and in accordance with sections 26(c) + and 27(1)(a)(i) and (b) of the Freedom of Information and Protection of Privacy Act (FoIPPA). The + information gathered from the criminal record check will be used by SPD to provide a recommendation as to your + hiring or ongoing suitability to your Employer, who will make the final decision. Should you have any questions + relating to the collection, use and disclosure of your personal information, please contact the Policy Analyst + at Security Programs Division via mail to PO Box 9217 Stn Prov Govt Victoria, BC V8W 9J1; email to + criminalrecords@gov.bc.ca; or by telephone at 1- 855-587-0185 + (option 2). +

    +
    + `, + styles: [ + ` + p { + margin-bottom: 0.5rem !important; + } + + ul { + margin-bottom: 0 !important; + } + + li:not(:last-child) { + margin-bottom: 0.5em; + } + `, + ], +}) +export class SaConsentToReleasePecrcComponent { + @Input() form!: FormGroup; + + @Output() checkboxChanged: EventEmitter = new EventEmitter(); + + onCheckboxChange(): void { + this.checkboxChanged.emit(); + } +} diff --git a/src/Spd.Presentation.Screening/ClientApp/src/app/shared/components/screening-application-steps/step-components/sa-personal-information.component.ts b/src/Spd.Presentation.Screening/ClientApp/src/app/shared/components/screening-application-steps/step-components/sa-personal-information.component.ts index f18ffac56..bad18643d 100644 --- a/src/Spd.Presentation.Screening/ClientApp/src/app/shared/components/screening-application-steps/step-components/sa-personal-information.component.ts +++ b/src/Spd.Presentation.Screening/ClientApp/src/app/shared/components/screening-application-steps/step-components/sa-personal-information.component.ts @@ -68,7 +68,7 @@ import { AppInviteOrgData, CrcFormStepComponent } from '../screening-application -
    +
    BC Government Employee ID (optional) diff --git a/src/Spd.Presentation.Screening/ClientApp/src/app/shared/components/screening-application-steps/step-components/sa-security-information.component.ts b/src/Spd.Presentation.Screening/ClientApp/src/app/shared/components/screening-application-steps/step-components/sa-security-information.component.ts index 53e16e84b..3dbe552ee 100644 --- a/src/Spd.Presentation.Screening/ClientApp/src/app/shared/components/screening-application-steps/step-components/sa-security-information.component.ts +++ b/src/Spd.Presentation.Screening/ClientApp/src/app/shared/components/screening-application-steps/step-components/sa-security-information.component.ts @@ -1,6 +1,6 @@ import { Component, Input } from '@angular/core'; import { FormBuilder, FormControl, FormGroup } from '@angular/forms'; -import { BooleanTypeCode, ScreeningTypeCode, ServiceTypeCode } from 'src/app/api/models'; +import { BooleanTypeCode, ScreeningTypeCode } from 'src/app/api/models'; import { SPD_CONSTANTS } from 'src/app/core/constants/constants'; import { FormControlValidators } from 'src/app/core/validators/form-control.validators'; import { FormGroupValidators } from 'src/app/core/validators/form-group.validators'; @@ -56,7 +56,7 @@ import { AppInviteOrgData, CrcFormStepComponent } from '../screening-application This is required
    - +
    Vulnerable Sector Category @@ -86,7 +86,6 @@ import { AppInviteOrgData, CrcFormStepComponent } from '../screening-application styles: [], }) export class SaSecurityInformationComponent implements CrcFormStepComponent { - notPssoOnly = true; facilityNameShow = false; facilityNameRequired = false; companyFacilityLabel = ''; @@ -102,8 +101,6 @@ export class SaSecurityInformationComponent implements CrcFormStepComponent { let companyFacilityLabel = ''; let companyFacilityHint = ''; - this.notPssoOnly = data.serviceType != ServiceTypeCode.Psso; - if (data.screeningType) { if (data.isCrrpa) { // If coming from Portal Invitation (screeningType is provided). If shown, always required. diff --git a/src/Spd.Presentation.Screening/ClientApp/src/app/shared/components/screening-application-steps/step-components/sa-summary.component.ts b/src/Spd.Presentation.Screening/ClientApp/src/app/shared/components/screening-application-steps/step-components/sa-summary.component.ts index 8352d980b..814ed1586 100644 --- a/src/Spd.Presentation.Screening/ClientApp/src/app/shared/components/screening-application-steps/step-components/sa-summary.component.ts +++ b/src/Spd.Presentation.Screening/ClientApp/src/app/shared/components/screening-application-steps/step-components/sa-summary.component.ts @@ -115,7 +115,7 @@ import { UtilService } from 'src/app/core/services/util.service';
    -
    +
    BC Government Employee ID
    {{ orgData.employeeId | default }}
    diff --git a/src/Spd.Presentation.Screening/ClientApp/src/app/shared/components/screening-request-add-common-modal.component.ts b/src/Spd.Presentation.Screening/ClientApp/src/app/shared/components/screening-request-add-common-modal.component.ts index e08e2d8bf..adff40533 100644 --- a/src/Spd.Presentation.Screening/ClientApp/src/app/shared/components/screening-request-add-common-modal.component.ts +++ b/src/Spd.Presentation.Screening/ClientApp/src/app/shared/components/screening-request-add-common-modal.component.ts @@ -107,18 +107,6 @@ export interface ScreeningRequestAddDialogData {
    -
    - - Paid by - - - {{ payer.desc }} - - - This is required - -
    -
    Application Type @@ -163,6 +151,21 @@ export interface ScreeningRequestAddDialogData {
    +
    + + Paid by + + + {{ payer.desc }} + + + This is required + +
    +
    -
    +
    {{ applicationStatistics[statisticsCodes.AwaitingPayment] ?? 0 }}
    @@ -76,7 +73,10 @@ import { UtilService } from 'src/app/core/services/util.service';
    Completed applications (for the last 365 days)
    -
    +
    {{ applicationStatistics[statisticsCodes.RiskFound] ?? 0 }}
    @@ -139,7 +139,7 @@ export class StatusStatisticsCommonComponent implements OnInit { applicationStatistics!: { [key: string]: number | null }; statisticsCodes = ApplicationPortalStatisticsTypeCode; - portalTypeCodes = PortalTypeCode; + isCrrp!: boolean; @Input() id: string | null = null; // If CRRP, id is the OrgId, else for PSSO, id is the UserId @Input() portal: PortalTypeCode | null = null; @@ -151,7 +151,9 @@ export class StatusStatisticsCommonComponent implements OnInit { return; } - if (this.portal == PortalTypeCode.Crrp) { + this.isCrrp = this.portal == PortalTypeCode.Crrp; + + if (this.isCrrp) { this.applicationStatistics$ = this.applicationService .apiOrgsOrgIdApplicationStatisticsGet({ orgId: this.id, @@ -161,7 +163,7 @@ export class StatusStatisticsCommonComponent implements OnInit { this.applicationStatistics = res.statistics ?? {}; }) ); - } else if (this.portal == PortalTypeCode.Psso) { + } else { this.applicationStatistics$ = this.applicationService .apiUsersDelegateUserIdPssoApplicationStatisticsGet({ delegateUserId: this.id, diff --git a/src/Spd.Presentation.Screening/ClientApp/src/app/shared/shared.module.ts b/src/Spd.Presentation.Screening/ClientApp/src/app/shared/shared.module.ts index c7ee55b15..966f39f7a 100644 --- a/src/Spd.Presentation.Screening/ClientApp/src/app/shared/shared.module.ts +++ b/src/Spd.Presentation.Screening/ClientApp/src/app/shared/shared.module.ts @@ -45,6 +45,7 @@ import { SaConsentToCrcComponent } from './components/screening-application-step import { SaConsentToReleaseCrrpaComponent } from './components/screening-application-steps/step-components/sa-consent-to-release-crrpa.component'; import { SaConsentToReleaseMcfdComponent } from './components/screening-application-steps/step-components/sa-consent-to-release-mcfd.component'; import { SaConsentToReleaseOfInfoComponent } from './components/screening-application-steps/step-components/sa-consent-to-release-of-info.component'; +import { SaConsentToReleasePecrcComponent } from './components/screening-application-steps/step-components/sa-consent-to-release-pecrc.component'; import { SaConsentToReleasePssoaComponent } from './components/screening-application-steps/step-components/sa-consent-to-release-pssoa.component'; import { SaContactInformationComponent } from './components/screening-application-steps/step-components/sa-contact-information.component'; import { SaDeclarationComponent } from './components/screening-application-steps/step-components/sa-declaration.component'; @@ -90,6 +91,7 @@ const SHARED_COMPONENTS = [ LoginFailureComponent, AlertComponent, SaConsentToReleasePssoaComponent, + SaConsentToReleasePecrcComponent, SaConsentToReleaseCrrpaComponent, SaConsentToReleaseMcfdComponent, StatusStatisticsCommonComponent, diff --git a/src/Spd.Resource.Repository/Application/ApplicationRepository.Bulk.cs b/src/Spd.Resource.Repository/Application/ApplicationRepository.Bulk.cs index 52be42104..de6457b81 100644 --- a/src/Spd.Resource.Repository/Application/ApplicationRepository.Bulk.cs +++ b/src/Spd.Resource.Repository/Application/ApplicationRepository.Bulk.cs @@ -48,7 +48,7 @@ public async Task AddBulkAppsAsync(BulkAppsCreateCmd cmd, Ca .Expand(a => a.spd_account_spd_servicetype) .Where(a => a.accountid == cmd.OrgId) .SingleOrDefaultAsync(ct); - spd_servicetype? servicetype = org.spd_account_spd_servicetype.First(); + spd_servicetype? servicetype = org.spd_account_spd_servicetype.First(s => s.spd_servicecategory == (int)ServiceTypeCategoryOptionSet.Screening); spd_portaluser? user = await _context.GetUserById(cmd.UserId, ct); Guid teamGuid = Guid.Parse(DynamicsConstants.Client_Service_Team_Guid); team? team = await _context.teams.Where(t => t.teamid == teamGuid).FirstOrDefaultAsync(ct); @@ -57,7 +57,7 @@ public async Task AddBulkAppsAsync(BulkAppsCreateCmd cmd, Ca //create applications List createApps = cmd.CreateApps.ToList(); - List results = new List(); + List results = new(); for (int i = 0; i < createApps.Count; i++) { results.Add(new ApplicationCreateRslt { LineNumber = i + 1 }); @@ -109,7 +109,7 @@ public async Task AddBulkAppsAsync(BulkAppsCreateCmd cmd, Ca //add history if (bulkResult != BulkAppsCreateResultCd.Failed) { - spd_genericupload bulkInfo = new spd_genericupload + spd_genericupload bulkInfo = new() { spd_genericuploadid = Guid.NewGuid(), spd_filename = cmd.FileName, diff --git a/src/Spd.Resource.Repository/Application/ApplicationRepository.Statistics.cs b/src/Spd.Resource.Repository/Application/ApplicationRepository.Statistics.cs index b8e92c421..07614c194 100644 --- a/src/Spd.Resource.Repository/Application/ApplicationRepository.Statistics.cs +++ b/src/Spd.Resource.Repository/Application/ApplicationRepository.Statistics.cs @@ -34,6 +34,7 @@ public async Task QueryApplicationStatisticsAsync(App var pssoUserStatistics = await user.spd_GetPSSOOrganizationStatistics().GetValueAsync(ct); var statisticsDictionary = new Dictionary(); if (pssoUserStatistics.AwaitingApplicant.HasValue) statisticsDictionary.Add(ApplicationPortalStatisticsCd.AwaitingApplicant, pssoUserStatistics.AwaitingApplicant.Value); + if (pssoUserStatistics.AwaitingPayment.HasValue) statisticsDictionary.Add(ApplicationPortalStatisticsCd.AwaitingPayment, pssoUserStatistics.AwaitingPayment.Value); if (pssoUserStatistics.AwaitingThirdParty.HasValue) statisticsDictionary.Add(ApplicationPortalStatisticsCd.AwaitingThirdParty, pssoUserStatistics.AwaitingThirdParty.Value); if (pssoUserStatistics.CancelledByApplicant.HasValue) statisticsDictionary.Add(ApplicationPortalStatisticsCd.CancelledByApplicant, pssoUserStatistics.CancelledByApplicant.Value); if (pssoUserStatistics.ClosedNoConsent.HasValue) statisticsDictionary.Add(ApplicationPortalStatisticsCd.ClosedNoConsent, pssoUserStatistics.ClosedNoConsent.Value); diff --git a/src/Spd.Utilities.Dynamics/Connected Services/OData Service/OData ServiceCsdl.xml b/src/Spd.Utilities.Dynamics/Connected Services/OData Service/OData ServiceCsdl.xml index 573985494..015597f4a 100644 --- a/src/Spd.Utilities.Dynamics/Connected Services/OData Service/OData ServiceCsdl.xml +++ b/src/Spd.Utilities.Dynamics/Connected Services/OData Service/OData ServiceCsdl.xml @@ -33,7 +33,7 @@ - + @@ -42,14 +42,17 @@ - + + + + @@ -76,7 +79,6 @@ - @@ -96,21 +98,21 @@ - + - - + - + + @@ -121,18 +123,16 @@ - - - + @@ -145,14 +145,12 @@ - - + - + - @@ -163,20 +161,20 @@ - + - + @@ -191,6 +189,7 @@ + @@ -202,19 +201,20 @@ + - - + + @@ -223,10 +223,10 @@ + - - + @@ -394,18 +394,18 @@ - + - + @@ -427,7 +427,7 @@ - + @@ -437,6 +437,7 @@ + @@ -446,11 +447,10 @@ - - + @@ -539,29 +539,29 @@ - - - - - - + + + + + - + - + + @@ -582,32 +582,32 @@ - - + - + + - + - - + + + - @@ -648,24 +648,24 @@ + - - - - - + + + + + - - + @@ -743,55 +743,55 @@ - - + + - + + + - - + - - + + - + + - - + - - + - - + - + - + - + - + - + + @@ -941,33 +941,33 @@ - + - + - - + + + - - + - - + - + + @@ -1158,12 +1158,12 @@ - - + + @@ -1195,26 +1195,26 @@ - - + + - + + + - - @@ -1283,21 +1283,21 @@ - + - - + + - - + + @@ -1327,7 +1327,6 @@ - @@ -1340,6 +1339,7 @@ + @@ -1369,13 +1369,13 @@ - + + - + - @@ -1386,7 +1386,9 @@ + + @@ -1397,13 +1399,10 @@ - - + - - @@ -1411,11 +1410,12 @@ - + + - + @@ -1472,17 +1472,17 @@ - - - + + + @@ -1549,57 +1549,57 @@ - - + - + - + + - - + - + + + - - + + - - + - - + + + - - + - - - + + + @@ -2554,16 +2554,16 @@ - - + + + - - + @@ -2594,18 +2594,18 @@ + - + + - - + + - + - - @@ -2618,9 +2618,9 @@ - + @@ -2643,21 +2643,21 @@ - + - - - + + + @@ -2688,20 +2688,20 @@ - - + + - + + + - - @@ -2733,46 +2733,47 @@ - + - - + + - - + - + - + + + @@ -2856,26 +2857,26 @@ - - - - + + + + + - - - + - - - - - + + + + + + @@ -2908,26 +2909,26 @@ - + - + + + - + - - - - + + @@ -2964,34 +2965,34 @@ - + + - - - + - + - - - + - - + + + - + + + - - + + @@ -3031,25 +3032,25 @@ - - - + + + + - - - + + @@ -3089,24 +3090,24 @@ + + - + - + + - - - + - @@ -3155,30 +3156,30 @@ - - + - - + + - + + - + + + - - - + @@ -3226,13 +3227,13 @@ + - - - + + @@ -3243,11 +3244,11 @@ - + + - - + @@ -3305,14 +3306,14 @@ - - + - + + @@ -3320,8 +3321,8 @@ - + @@ -3381,37 +3382,37 @@ - - + - + + + - - + - - + + - - - + + - - + + + - + - - + - + + @@ -3483,23 +3484,23 @@ + - - - - + + + - + - + @@ -3544,23 +3545,23 @@ - - - + - - + + - + + + @@ -3613,28 +3614,28 @@ + - - - + + + + - + - - - + + - + - + - @@ -3691,29 +3692,29 @@ - - + - - + + + - - - + + + + + - - - + @@ -3849,7 +3850,7 @@ - + @@ -3860,15 +3861,15 @@ - - + - + + + - - + @@ -3913,15 +3914,15 @@ - + - - + + - + @@ -3929,15 +3930,15 @@ - - + + - - + + @@ -3947,10 +3948,10 @@ - + - + @@ -3982,11 +3983,11 @@ + - @@ -4057,17 +4058,17 @@ + + - - @@ -4076,17 +4077,17 @@ - + - + @@ -4155,14 +4156,14 @@ + - - + @@ -5016,27 +5017,27 @@ - - + + + - + - - + - + @@ -5062,23 +5063,23 @@ - - - - + + - - + + + + @@ -5126,17 +5127,17 @@ + - - - + + @@ -5194,25 +5195,25 @@ + + - - - - + - - + + - + + - + @@ -5236,79 +5237,79 @@ + + - + + + - + - + - - - - - - - - + + + + + + + + - + - + + - - - + - - - - + + + - + + - + - + - - - + - + - - + @@ -5537,39 +5538,39 @@ - + - + + - + - + - - - + + + + - + - + - - + - - + - - + - + + @@ -5607,9 +5608,9 @@ + - @@ -5652,24 +5653,24 @@ + - - + + - - + @@ -5696,19 +5697,19 @@ - + - - - - + + + + @@ -5765,19 +5766,19 @@ - + - + + - - + @@ -5791,17 +5792,17 @@ + - + - + - @@ -5886,42 +5887,43 @@ - - + + - + - - - + + - - - - + + + - + + + - - + + - + + @@ -5932,13 +5934,12 @@ - - - + - - + + + @@ -6015,66 +6016,66 @@ - + + - + + - - - - + - + - - + - - - + + + + - - + - - + + + - + - + - + - - + + + @@ -6168,23 +6169,23 @@ + - + - - - - + + + + - - + @@ -6199,30 +6200,30 @@ - + - + - - + + + - - - + + - - + + @@ -6263,31 +6264,31 @@ - - - + + + - - - + + - - + + + + + - - - - + - + + @@ -6342,23 +6343,23 @@ - - - + - + + - - - - + + + + + @@ -6410,29 +6411,29 @@ + - - - - + + + + - + - + - + + + + - - - - - + @@ -6474,27 +6475,27 @@ - - - - + - - - + + + + - + + + + - @@ -6518,36 +6519,36 @@ - - + + - + + - + - + + - - - + - + - + - + @@ -6595,28 +6596,26 @@ + - - + + - + - - - - + @@ -6629,28 +6628,28 @@ - - - + - + + + - + - - + - + + @@ -6663,20 +6662,22 @@ + - - + + - + + + - @@ -6741,18 +6742,18 @@ - - + - + + - + - + @@ -6766,33 +6767,33 @@ + - - + - + - + - - - + + + + - - + @@ -6863,26 +6864,26 @@ - + + + - + - - - + + + - + - - - + @@ -7210,8 +7211,10 @@ + + @@ -7220,14 +7223,12 @@ - + - - @@ -7269,21 +7270,21 @@ - + + + - - + - - + @@ -7343,12 +7344,12 @@ - - + + @@ -7394,18 +7395,16 @@ + - - + - - - - + + @@ -7417,130 +7416,132 @@ - + + - - + + + + - + - + - - + - + - - - - + + + + + + - - - - - - + - + - + - - + + - + + + - + - + - - + - - + - - + + - + + - + + + + - @@ -7548,27 +7549,30 @@ + + + + + - - + + - - - + @@ -7577,16 +7581,16 @@ + + - - - + - + @@ -7594,27 +7598,24 @@ - + + - - + + - - - + - - + + - - + - - + @@ -7761,32 +7762,27 @@ - - - + - - + + + - - - - + - @@ -7794,6 +7790,7 @@ + @@ -7801,13 +7798,17 @@ - + + + + - + + @@ -7868,32 +7869,32 @@ - + - - + + + - + - + - - - + + - - - + + + @@ -7903,23 +7904,23 @@ - + + - - - - + + + - - + - + + @@ -8004,16 +8005,15 @@ - + - + - - - + + @@ -8023,15 +8023,16 @@ - + - - + + + @@ -8060,29 +8061,29 @@ + + - + + + - - - + - + - - @@ -8127,15 +8128,16 @@ - + - + + @@ -8149,7 +8151,6 @@ - @@ -8222,25 +8223,25 @@ + - + - - + - + @@ -8418,21 +8419,21 @@ - - - + + + - - + + - + @@ -8456,13 +8457,13 @@ - - + + @@ -8503,23 +8504,23 @@ + + - + - - - - + + - + @@ -8549,6 +8550,7 @@ + @@ -8569,6 +8571,7 @@ + @@ -8577,10 +8580,8 @@ - - @@ -8620,32 +8621,32 @@ + + + - - + - + - - - - + + @@ -8826,36 +8827,36 @@ - - - - + + + + + - - + + - + + - - - - + + @@ -8936,35 +8937,35 @@ - - - - - - + - - + + + + - - + - + + - + + + + @@ -9048,13 +9049,13 @@ - + - + @@ -9064,29 +9065,29 @@ - + + - - + + - - + - + @@ -9119,21 +9120,21 @@ + - - - - - - + + + + + @@ -9167,24 +9168,24 @@ + - - + - - - + - + + + @@ -9245,13 +9246,13 @@ - + - - + + @@ -10081,22 +10082,22 @@ + + - - + - + - @@ -10118,31 +10119,31 @@ + + - + - - - - + + + - - - + + + - - + @@ -10260,23 +10261,23 @@ + + - - - + - - - - + + + + @@ -10318,11 +10319,11 @@ - - + + @@ -10330,14 +10331,14 @@ - + + - @@ -10395,6 +10396,7 @@ + @@ -10402,16 +10404,15 @@ - + - - + @@ -10447,54 +10448,54 @@ + + + - + + + - - - - - + + + + - - - - - + + - + + - - - - + + - - - + + + - + @@ -10591,7 +10592,8 @@ - + + @@ -10599,69 +10601,68 @@ + - - - + + + - - + - + - - - + + + + + + + - - - + - - + + - - + - - + - + - - - + + - - + - + + - - + + @@ -10706,22 +10707,22 @@ - + - + - + @@ -10752,29 +10753,29 @@ - - + + - + + - + - - + - + - - + + @@ -10837,23 +10838,23 @@ - - - - + + + - - + - + + + - + @@ -10898,10 +10899,10 @@ - + @@ -10913,47 +10914,47 @@ - + + + - - + - - - + - + + - + + - + - @@ -11034,24 +11035,24 @@ + - + + + - - - + + - - @@ -11088,13 +11089,13 @@ - + - + @@ -11105,30 +11106,30 @@ - - + + + + - - - + - - + + + + - - + - - + @@ -11186,14 +11187,14 @@ - - - + + + @@ -11212,13 +11213,14 @@ - + + @@ -11227,10 +11229,9 @@ - - + @@ -11257,10 +11258,10 @@ - - + + @@ -11313,9 +11314,9 @@ - + @@ -11323,6 +11324,7 @@ + @@ -11330,7 +11332,6 @@ - @@ -11376,16 +11377,14 @@ - - + + - - @@ -11393,12 +11392,14 @@ + + - + - + @@ -11443,31 +11444,31 @@ - - - - - - + + + + - + + - + - + - + - + + @@ -11561,25 +11562,25 @@ - - - + + + + - - - + + - - + + @@ -11615,30 +11616,30 @@ - - - + + - - - - + - - - + + + + + + + @@ -11677,17 +11678,17 @@ - - - + + + - + + + + - - - @@ -11832,19 +11833,19 @@ + + - + - - @@ -11903,8 +11904,8 @@ - + @@ -12030,35 +12031,35 @@ + - + + - + - + - - + - - - + + + - + - - - + - - - + + + + @@ -12102,26 +12103,26 @@ - - - - - + + + - - + + + + + - - + @@ -12171,17 +12172,16 @@ - + - - - + + - + @@ -12192,10 +12192,10 @@ - - + - + + @@ -12203,15 +12203,17 @@ + - + + - + @@ -12222,25 +12224,24 @@ - - + + - + - - + @@ -12331,25 +12332,25 @@ - - - + + + + + - - - + + + - - @@ -12387,21 +12388,21 @@ - + + - + + - - @@ -12426,50 +12427,50 @@ - + - - - + + + + + + + + - - - + - + - - - - + + + - - - + + - + - @@ -12516,25 +12517,25 @@ - - + - - + - + + - - - + + + - + + @@ -12559,24 +12560,24 @@ + - + + + - - - @@ -12640,11 +12641,11 @@ + - @@ -12685,23 +12686,23 @@ - - + + + - + - @@ -12758,9 +12759,9 @@ - + @@ -13118,16 +13119,15 @@ + - - - + @@ -13136,13 +13136,14 @@ - + - + + @@ -13206,75 +13207,75 @@ - + + + - - - - + + - + + + - + - + + - + - + - - + + - - + + - - - + + - - + + - + - - + - - - - + + + + - - + @@ -13345,6 +13346,7 @@ + @@ -13358,22 +13360,25 @@ + - + - + + + @@ -13388,13 +13393,13 @@ - + - + + - @@ -13405,7 +13410,6 @@ - @@ -13417,12 +13421,9 @@ - - - @@ -13542,34 +13543,34 @@ - - - - + + + + - - + + - - + - - - + + + + - + @@ -13613,27 +13614,27 @@ - + + - - - + - + + - - + + @@ -13668,7 +13669,6 @@ - @@ -13681,14 +13681,15 @@ + + - @@ -13731,12 +13732,13 @@ - + - + - + + @@ -13745,47 +13747,46 @@ - + + - - - - - - - + + - - - - + + - - + + - - + + + - - - + + + + - + + - - + + + + @@ -13887,28 +13888,28 @@ - + - + - + - + - - + - + + @@ -14000,15 +14001,15 @@ - + + + - - @@ -14132,157 +14133,157 @@ - - + + + + - + - + + + + - + - - + + - + + + - - - + + + + - - - + + + - - - + + + + - - - + - - - + + - - - - + + - + - + - - - - + + - - + - - + - - + - - - + + + + + + - - - - - + + + - - - + + + - + + - - - + + - + - + + - @@ -14410,10 +14411,10 @@ - + @@ -14471,9 +14472,9 @@ + - @@ -14534,24 +14535,24 @@ - - + + - + - + + - - - + + @@ -14575,26 +14576,26 @@ - + + + + - - + - - - + @@ -14649,17 +14650,17 @@ + - + - @@ -14734,27 +14735,27 @@ - - - + - + + - + - - - + + + + @@ -14785,10 +14786,10 @@ - + @@ -14805,6 +14806,7 @@ + @@ -14812,17 +14814,15 @@ - - - + @@ -14855,6 +14855,7 @@ + @@ -14943,19 +14944,19 @@ - - + - - - + + + + @@ -15788,19 +15789,19 @@ - - - + + - + + @@ -15832,15 +15833,13 @@ - + - + - - @@ -15848,9 +15847,11 @@ + + @@ -15877,33 +15878,33 @@ + - + - - - + + - - + - - + + + - + - + - + @@ -15927,16 +15928,16 @@ + - - + @@ -15950,7 +15951,7 @@ - + @@ -15988,24 +15989,24 @@ + - - + - + @@ -16049,13 +16050,12 @@ - - + @@ -16068,6 +16068,7 @@ + @@ -16095,23 +16096,23 @@ - - + - + - + + @@ -16152,23 +16153,23 @@ - - - - - - + + + + + - - + + + @@ -16211,28 +16212,28 @@ - + - - - - + + + + - + - + + - - + @@ -16307,9 +16308,9 @@ - + @@ -16358,25 +16359,25 @@ + + + - + - - - - - + + - + @@ -16420,26 +16421,26 @@ - + - + + - - + - + - - + + @@ -16483,26 +16484,26 @@ - - - + - - - - + + - + - - + + + + - - + + + + - + @@ -16545,28 +16546,28 @@ - - - - - - + + - - + + + + + - - - + + + + @@ -16635,51 +16636,51 @@ - + - + - - + + - + + - - + + + - + + + - - - - @@ -16732,27 +16733,27 @@ + - + + - - - + + - + - @@ -16813,13 +16814,12 @@ - - + @@ -16828,6 +16828,7 @@ + @@ -16891,32 +16892,32 @@ - - - - + - - - + - - + - + + - - + + + + + + + @@ -16981,21 +16982,21 @@ - - + + + + - - + - + - @@ -17063,31 +17064,31 @@ - + - - + - - - - + + + + + + + - - + - - + + - @@ -17131,28 +17132,28 @@ + - + + - - - - + + + - + - - + + + - - @@ -17289,27 +17290,27 @@ + - - - - + + + + + - - - + + - @@ -17349,7 +17350,7 @@ - + @@ -17359,6 +17360,7 @@ + @@ -17368,7 +17370,6 @@ - @@ -17377,7 +17378,7 @@ - + @@ -17428,24 +17429,24 @@ + + - - - - + - - + + + @@ -17533,13 +17534,13 @@ - + - + @@ -17549,20 +17550,20 @@ - + - + + - - + + - @@ -17589,31 +17590,31 @@ + - + + - + - + - + - - + - - - + + - - + + @@ -17650,12 +17651,12 @@ - + @@ -17703,28 +17704,28 @@ + - + - - - - - - - + + + + + + - - + + @@ -17766,36 +17767,36 @@ + - + - + - + - - - - + - - - - - + - - - - + + + + + + + + + + @@ -17834,28 +17835,28 @@ - + + - - - - + + + + - + - + - + - - - + + @@ -17885,31 +17886,31 @@ - + + + - - + - - + - + - - + - + + @@ -17947,27 +17948,27 @@ - - - - + + + + + - + - + - - - + + @@ -18010,28 +18011,28 @@ - - + - - + + + + - + - + - @@ -18070,18 +18071,18 @@ + - + - - + @@ -18092,7 +18093,7 @@ - + @@ -18141,30 +18142,30 @@ - - - - - - - + + + + + + + - + - - + - + + @@ -18202,13 +18203,15 @@ + - - + + + @@ -18217,24 +18220,22 @@ - + - - + - - + - - - - + + + + @@ -18272,25 +18273,25 @@ - - + + + + - - - + + - - + @@ -18376,9 +18377,9 @@ - + @@ -18388,7 +18389,7 @@ - + @@ -18427,69 +18428,69 @@ - + + + - - + + - - - - + - - - + + + - + + + - - + - - + + + - - - - + + - - + - + + + @@ -18534,22 +18535,22 @@ - + - - + + + - - + @@ -18599,7 +18600,6 @@ - @@ -18609,6 +18609,7 @@ + @@ -18661,25 +18662,25 @@ + + + - - - + + + - - + + - - + - - @@ -18756,28 +18757,28 @@ - + + - - - + + + - - + - + + - @@ -18825,25 +18826,25 @@ - - - + + + + - - + - + + - + - + - @@ -18904,18 +18905,18 @@ + - - + @@ -18946,26 +18947,26 @@ - + - - + + - + + + + - - - - + @@ -18998,15 +18999,15 @@ - - + + + - @@ -19014,7 +19015,7 @@ - + @@ -19053,33 +19054,33 @@ - + - - - + + + - - + - + + - - + - - - - + + + + + @@ -19123,18 +19124,18 @@ + - + + - - - + @@ -19179,21 +19180,21 @@ - + - + - - + + @@ -19232,18 +19233,18 @@ - + - - - - + + + + @@ -19288,7 +19289,7 @@ - + @@ -19297,6 +19298,7 @@ + @@ -19305,7 +19307,7 @@ - + @@ -19327,15 +19329,14 @@ - - - + + @@ -19344,22 +19345,22 @@ + + - - + + - - - - + + @@ -19377,22 +19378,22 @@ - - + + - + + - - + @@ -19406,23 +19407,23 @@ + - + - - + - + - + @@ -19437,36 +19438,36 @@ - - - + + + + - + + + - - - - - + + - - - + + + + - - + @@ -19490,28 +19491,28 @@ - - + + - + - - - - + + - + + + - - + + @@ -19541,25 +19542,25 @@ - + - + + + - + + + - - - + + - - - @@ -19598,17 +19599,18 @@ + + - + - - + + - @@ -19617,9 +19619,8 @@ - - + @@ -19652,24 +19653,24 @@ - - - - + + - - + + + + @@ -19709,6 +19710,7 @@ + @@ -19719,7 +19721,6 @@ - @@ -19751,28 +19752,28 @@ - - + + + - - + @@ -19806,14 +19807,14 @@ + + - - @@ -19824,9 +19825,9 @@ - - + + @@ -19878,16 +19879,17 @@ + - - + + - + @@ -19895,8 +19897,7 @@ - - + @@ -19937,33 +19938,33 @@ - - + + + + + - - - - + + - - + - + + - @@ -19989,24 +19990,24 @@ - - + + - - - - + + + - + - + + - + @@ -20044,29 +20045,29 @@ + + - - + + - - - - - - + + + + - - + + @@ -20102,34 +20103,34 @@ - - + - + - - - - - + + + + - + - + + + - + + + - - - + @@ -20150,112 +20151,112 @@ - - - - + + + - - - - + + + - - + - - - + + - + - - + - + + - - + + + - - - + - + + + + - - + - - + + + + + + + + - - - + + + - - + - + - + + - - - - + + - + - - - + + + - - + - - - - + + - + - + + + - + @@ -20365,9 +20366,9 @@ + - @@ -20438,19 +20439,19 @@ + - + - - - - + + + + - @@ -20459,38 +20460,38 @@ + - - + - + + - - - - + + + + - - - - + + + - + + - + - - + @@ -20545,8 +20546,9 @@ - - + + + @@ -20555,22 +20557,21 @@ - - - - - + + + - + - - - + + + + @@ -20649,12 +20650,12 @@ + - - + @@ -20700,15 +20701,14 @@ + - - - + - + @@ -20716,44 +20716,42 @@ + + - + - - + + - + - - + + - - - + - - - + + - @@ -20761,97 +20759,93 @@ - + + - - + + - - + + - + + + - + - - - + + - - - - - + + + + - - - - - - + + - + - - + + + - + - - + - - - + + - + + - + + - - + - - + + - - + - - + + - + + - - + @@ -20859,100 +20853,104 @@ - + - + - - + + + - - + + - - + + + - + - - - + + - - + + - + - - + + - + - + - + - - + - + + + + - + + - + - + + - - + - - + + - + - + + - - + + + + - - - - + @@ -20961,79 +20959,82 @@ - + + + + + - + - - - + + + - - + + + - + + - + + - - - + - - + - - + + - - - + + + - - - + + + - - - - + + + - + - + @@ -21041,11 +21042,11 @@ - + - - + + @@ -21222,27 +21223,27 @@ + + - - + + - - + - - - + + + - + - - - + + @@ -21463,29 +21464,29 @@ - + - + + - + + - - - - + - + - - + + - + + @@ -21515,25 +21516,25 @@ - - - + + - - + + + @@ -21627,31 +21628,31 @@ - - + + + + - - + - - - - + + + + + - - + - + + - - + - @@ -21692,22 +21693,22 @@ - + - + - + + - @@ -21730,41 +21731,41 @@ - - + - - - - + + - + - - - + + + - + - - + + + + - + + @@ -21789,29 +21790,29 @@ - - - - - + + + + + + - - + + - + - - + + - @@ -21823,31 +21824,31 @@ - + + - + + - - + - - - + - + - - + + - + + @@ -21881,23 +21882,23 @@ - + - - + + + - + - + - @@ -21923,26 +21924,26 @@ - - - + + + - - - + + + - - + + @@ -21977,15 +21978,15 @@ - - + + - + @@ -22075,11 +22076,11 @@ + - + - @@ -22156,14 +22157,14 @@ - + - + @@ -22198,26 +22199,26 @@ - - + + + + - - + + + - - - - + - + - - + + @@ -23087,11 +23088,12 @@ - + + - + @@ -23100,7 +23102,6 @@ - @@ -23115,40 +23116,40 @@ - - - - - + + + + + + - - + + + - - - - + + + - @@ -23921,23 +23922,23 @@ - + + - - + + + - - @@ -23978,16 +23979,16 @@ - - - + + + @@ -24043,29 +24044,29 @@ - - + - - + + - + - - + + - + + @@ -24091,28 +24092,28 @@ - + - + + + - + + - - - - - - + - - + + + + + - @@ -24161,34 +24162,34 @@ - - - - + + + + + + - - + - - - - + + + + - + + - - - - + + @@ -24235,62 +24236,62 @@ - + + - - - + + - - + + - - + - + - + - - - + + + - + + - - + - + + @@ -24383,24 +24384,24 @@ - - - - - + + + - + - + + - + + @@ -24443,9 +24444,9 @@ - + @@ -24460,39 +24461,39 @@ - - + - - + - + + - + - + + - - - + + + + - - - + + @@ -24513,71 +24514,71 @@ - + - + + - + + - + - + - - + - + - - - - + - + - + + + - + - - + - - - - - + + + + - - - + + + + - + + @@ -24604,29 +24605,29 @@ + - + - - + - - + + @@ -24658,6 +24659,7 @@ + @@ -24675,7 +24677,6 @@ - @@ -24749,43 +24750,43 @@ - - + + + + - - + - - - - + + + - - - + + + + - @@ -24837,10 +24838,10 @@ - + - + @@ -24890,70 +24891,70 @@ + + + - - - + - + + - + - - + + + + + - + + - - + + - + - - - - - - - + - + - + - - - + + + - + - - + + - + @@ -25016,24 +25017,22 @@ - - + - + - @@ -25045,10 +25044,10 @@ - + @@ -25066,6 +25065,7 @@ + @@ -25086,6 +25086,7 @@ + @@ -25195,27 +25196,27 @@ - - - - + + + - + - + + @@ -25257,29 +25258,29 @@ - - + - - - - - - + + + + + + - - - + + + - + + @@ -25325,35 +25326,35 @@ + + + - + - - + - - + + - - - - + + + - + - + - + + - - @@ -25395,7 +25396,7 @@ - + @@ -25404,8 +25405,8 @@ + - @@ -25437,42 +25438,42 @@ + + - - + - - + + + + - + - - - - - - + + + + + - - @@ -25537,10 +25538,10 @@ + + - - @@ -25614,14 +25615,12 @@ - - @@ -25631,6 +25630,8 @@ + + @@ -25657,18 +25658,19 @@ - - + + + + - @@ -25683,28 +25685,27 @@ - - - + + - - + - + + - + - + @@ -25745,15 +25746,15 @@ + - - - - + + + @@ -25828,25 +25829,25 @@ - - - + + + + + + - + - - + + - - - @@ -25887,12 +25888,12 @@ + - + - @@ -25908,12 +25909,12 @@ - + - + @@ -25922,25 +25923,25 @@ - - + + + + + + - - - - @@ -25988,11 +25989,11 @@ - + @@ -26010,24 +26011,24 @@ - + + - + + - - - + - + @@ -26068,31 +26069,31 @@ - + + + - - - - + + + - + - - + @@ -26119,36 +26120,36 @@ - + + - - - + + - - + - + + + - @@ -26195,78 +26196,78 @@ + + + - + + - - + - + + - + - + - + + - - - + - - + + + - + + - - - - - - - - + - + + + + + - - - - + + + + - + + - + - - - @@ -26327,22 +26328,21 @@ + + - - - - - + + @@ -26351,21 +26351,21 @@ - + + - + - + - @@ -26379,21 +26379,26 @@ - + - + + + + - + - + + + + - @@ -26412,20 +26417,16 @@ - + - - - - - + @@ -26515,6 +26516,7 @@ + @@ -26530,16 +26532,15 @@ - + - - + - + @@ -26575,31 +26576,31 @@ + - + - + - + - - - + + - + + - - - + + @@ -26624,28 +26625,28 @@ - + - - + + + - + - + + - - - + @@ -26679,23 +26680,23 @@ - - - - + + + - + + - + @@ -26799,13 +26800,13 @@ + - + - @@ -26831,7 +26832,7 @@ - + @@ -26840,25 +26841,25 @@ + - - - - - - + + + + + @@ -26882,25 +26883,25 @@ - - + + - + - + @@ -26929,12 +26930,12 @@ - - + - + + @@ -26997,12 +26998,12 @@ - + + - @@ -27016,39 +27017,39 @@ + + - + + - - - + - - + - - - + + + @@ -27072,8 +27073,8 @@ - + @@ -27087,26 +27088,26 @@ - + - - + - + + + - - - - - + + + + + - @@ -27137,26 +27138,26 @@ - - - - + + + + + + - - - + @@ -27215,12 +27216,11 @@ + - - @@ -27231,18 +27231,19 @@ - - + + - + + @@ -27325,26 +27326,25 @@ - - + + - - + @@ -27352,6 +27352,7 @@ + @@ -27399,37 +27400,37 @@ - - + - - + - - + + - + + + - - - + - + + + - + @@ -27450,23 +27451,23 @@ - - + + + - + + + - + - - + - - @@ -27488,60 +27489,60 @@ + - - + + + - + - + + + - - + - - - + - + - - - - + + + - + - + @@ -27590,36 +27591,36 @@ - - + - + - + - - + + + + - + - - + @@ -27655,34 +27656,34 @@ - - + + - - + + + + + - - - - - - + + + - + @@ -27878,20 +27879,20 @@ - + - - - - + + + + @@ -27964,10 +27965,9 @@ - + - @@ -27982,6 +27982,7 @@ + @@ -27991,7 +27992,7 @@ - + @@ -28031,33 +28032,33 @@ - - - - + + - + + + - - - - + + + + + - @@ -28115,33 +28116,33 @@ - - + - + - - + + + + - + + - - - + + - @@ -28198,30 +28199,30 @@ - - + + + + - + - + + - - - + - @@ -28336,33 +28337,33 @@ - + + + + + + - - - - - + - - + - - - - - - - + + + + + + + @@ -28417,21 +28418,21 @@ - + - + - + @@ -28560,30 +28561,30 @@ - - - - + + - - - + + + + - + - + + @@ -28633,138 +28634,138 @@ - + - - + + + + - - - - - + - + - - - + - - + + + - + - + - - - + - + + - - - - + + - + + - + - - - + - + - + - - - - + + - - + - - - + - + + + + - + - + - + - + + + + + + - - + + + - - + - - + + - + + - + + + + + + - - - + + + - + - - @@ -28869,26 +28870,26 @@ - + + + - - + + - - - + - + @@ -29078,21 +29079,22 @@ - + + + - - - + + @@ -29137,31 +29139,31 @@ + + - + - - + + - - + + - - @@ -29215,28 +29217,28 @@ - - - - - - - - + + + - + + + + + + - - - + + + - + @@ -29395,18 +29397,16 @@ - + + + - - - - + - - + @@ -29414,7 +29414,9 @@ - + + + @@ -29458,22 +29460,22 @@ - + + - + - + - - + @@ -29508,27 +29510,27 @@ - - + + - - + + - + + - - + @@ -29557,36 +29559,39 @@ + - + - - + + + - + + - + + - + - - + - + - - - + + - + + @@ -29597,27 +29602,24 @@ - - + - + - + - + + - - - @@ -29740,27 +29742,27 @@ - - - - + + + - + + - - - + + + @@ -29806,28 +29808,28 @@ - - - + - - + + + - + + - + + - @@ -30120,41 +30122,296 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + - + - - + + - + - - + + - + - + + + - @@ -30302,31 +30559,31 @@ - - + + - - + + - - + + + - + - - - + + @@ -30359,36 +30616,37 @@ - + - - - + + + - - - - + + + - + + + - + @@ -30397,14 +30655,15 @@ - + + - - + + @@ -30476,23 +30735,23 @@ - - + + + - - + @@ -30524,57 +30783,57 @@ - + + + - - + - - + + + + - - + + - + + + - - - - - - + + - - + - + - - + + + - @@ -30711,6 +30970,7 @@ + @@ -30729,12 +30989,12 @@ - + + - @@ -30742,7 +31002,6 @@ - @@ -30788,28 +31047,28 @@ - + - - + - + - + - - + + + - + - - + + @@ -30852,16 +31111,16 @@ - + - + @@ -30937,35 +31196,35 @@ - + - - + - - + + - - - + - + + - - + + + + - + - + + - - + @@ -31066,8 +31325,9 @@ - + + @@ -31083,7 +31343,6 @@ - @@ -31379,25 +31638,25 @@ - - - + - - + - + + + + + - @@ -31438,25 +31697,25 @@ + + + + - - - - + - + - @@ -31497,29 +31756,29 @@ + - - + - + - - + + @@ -31560,29 +31819,29 @@ + - - + + + - - + - - - + + - - - - + + + + @@ -31619,30 +31878,30 @@ - + + - + - + - - + - - - + + + - + @@ -31705,62 +31964,60 @@ - - - + + - + - + - - - - + + - + + - - + - - - + + + - - - + + + + + - - - + - - - + + - + + + - + @@ -31768,20 +32025,21 @@ - + - + + - + - - + + @@ -31895,22 +32153,22 @@ - - - + + + + - - + - + - + @@ -31954,20 +32212,20 @@ - - - + + + + + - - + - @@ -32003,10 +32261,10 @@ - - + + @@ -32050,30 +32308,30 @@ - - + - + - + + + - + - - + + + - - - + + - @@ -32955,32 +33213,32 @@ - - + - - + + - - + - + + - + + @@ -33023,123 +33281,125 @@ + - - + + + + + - + + - - - + + - - + + - + - + + - - - + + + + + - - - + - - + + + - + - + - - - - + + + - + - + - - + - + - + - + + - - - + - - - + + + - + + - - + - - + - - + - + + - + @@ -33147,11 +33407,9 @@ - - + - @@ -34842,15 +35100,15 @@ - - - + + + @@ -34953,9 +35211,9 @@ - + @@ -34964,15 +35222,15 @@ - - - + + + @@ -35232,9 +35490,9 @@ + - @@ -35242,16 +35500,16 @@ + + - - - + @@ -35275,6 +35533,7 @@ + @@ -35284,10 +35543,9 @@ - - + @@ -35352,28 +35610,28 @@ - - - - + + + - + + + - - + + - @@ -35496,8 +35754,8 @@ - + @@ -35525,20 +35783,20 @@ - - + - - + + + - + @@ -35563,31 +35821,31 @@ - - + + + - - + + - + + - + - - + + - - - - + + - + @@ -35608,18 +35866,20 @@ + - + + - - + + + - @@ -35630,12 +35890,10 @@ - - @@ -35666,26 +35924,26 @@ - + - - + + - - + + @@ -35827,7 +36085,6 @@ - @@ -35836,13 +36093,14 @@ + + - - + @@ -35868,25 +36126,25 @@ - + - - - - + + + + - + @@ -35908,29 +36166,29 @@ - + - + - - + + + + - + + - - - @@ -35966,17 +36224,17 @@ - + + + - - @@ -35984,7 +36242,7 @@ - + @@ -36025,24 +36283,24 @@ - + - + - - + + - + @@ -36075,19 +36333,19 @@ + - - + + + - - + - @@ -36164,6 +36422,7 @@ + @@ -36171,25 +36430,24 @@ - + + - + + - + - - + - - @@ -36222,24 +36480,24 @@ - - - + + + + - - + + - + - @@ -36275,19 +36533,21 @@ + - + - + + @@ -36303,8 +36563,7 @@ - - + @@ -36312,7 +36571,7 @@ - + @@ -36324,7 +36583,6 @@ - @@ -36334,17 +36592,17 @@ - + - + @@ -36396,9 +36654,9 @@ + - @@ -36412,35 +36670,35 @@ - - - - - - + + + + + - - + + + - - - + + + - - + + - + @@ -36467,26 +36725,26 @@ - + + - + + - + - + - - - - + + + - @@ -36515,7 +36773,6 @@ - @@ -36527,6 +36784,7 @@ + @@ -36681,67 +36939,67 @@ + - - - - + - + + + - - + - - + + + + - - - - + + + - - - + + + + + - - - - + + + - @@ -47006,6 +47264,7 @@ +