vcomply-workflow-engine 2.6.19 → 2.6.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/vcomply-workflow-engine.umd.js +420 -612
- package/bundles/vcomply-workflow-engine.umd.js.map +1 -1
- package/esm2015/lib/add-multiple-responsibility/add-multiple-responsibility.component.js +1 -1
- package/esm2015/lib/add-multiple-risk/add-multiple-risk.component.js +1 -1
- package/esm2015/lib/confirmation-alert/confirmation-alert.component.js +4 -4
- package/esm2015/lib/confirmation-alert/confirmation-alert.component.ngfactory.js +11 -4
- package/esm2015/lib/formgroup/cs-checkbox-indeterminate/cs-checkbox-indeterminate.component.js +1 -1
- package/esm2015/lib/interfaces/confirmation-alert.js +1 -1
- package/esm2015/lib/log-an-issue/log-an-issue.component.js +1 -1
- package/esm2015/lib/sharedComponents/assessment-editor/services/editor.service.js +1 -1
- package/esm2015/lib/sharedComponents/assessment-editor/services/validator.service.js +6 -4
- package/esm2015/lib/sharedComponents/assessment-editor/services/validator.service.ngsummary.json +1 -1
- package/esm2015/lib/sharedComponents/floating-bar/floating-bar.component.js +3 -8
- package/esm2015/lib/sharedComponents/floating-bar/floating-bar.component.ngfactory.js +3 -4
- package/esm2015/lib/sharedComponents/floating-bar/floating-bar.component.ngsummary.json +1 -1
- package/esm2015/lib/sharedComponents/format-and-evidence/format-and-evidence.component.js +1 -1
- package/esm2015/lib/sharedComponents/program-listing/program-listing.component.js +40 -220
- package/esm2015/lib/sharedComponents/program-listing/program-listing.component.ngfactory.js +70 -78
- package/esm2015/lib/sharedComponents/program-listing/program-listing.component.ngsummary.json +1 -1
- package/esm2015/lib/sharedComponents/risk-classification/risk-classification.component.js +1 -1
- package/esm2015/lib/ui-kit/formgroup/cs-checkbox-indeterminate/cs-checkbox-indeterminate.component.js +1 -1
- package/esm2015/lib/workflow-assessment/import-an-assessment/import-an-assessment.component.js +1 -1
- package/esm2015/lib/workflow-assessment/workflow-assessment.component.js +1 -1
- package/esm2015/lib/workflow-compliance/workflow-compliance.component.js +146 -123
- package/esm2015/lib/workflow-compliance/workflow-compliance.component.ngfactory.js +60 -88
- package/esm2015/lib/workflow-compliance/workflow-compliance.component.ngsummary.json +1 -1
- package/esm2015/lib/workflow-engine-container/workflow-engine-container.component.js +14 -3
- package/esm2015/lib/workflow-engine-container/workflow-engine-container.component.ngfactory.js +16 -13
- package/esm2015/lib/workflow-engine-container/workflow-engine-container.component.ngsummary.json +1 -1
- package/esm2015/lib/workflow-engine.module.js +2 -4
- package/esm2015/lib/workflow-engine.module.ngfactory.js +1 -1
- package/esm2015/lib/workflow-policy/workflow-policy.component.js +1 -1
- package/esm2015/lib/workflow-program/create-program-ui/file-pill/file-pill.component.js +1 -1
- package/esm2015/lib/workflow-program/create-program-ui/form-field/form-field.component.js +1 -1
- package/esm2015/lib/workflow-program/create-program-ui/input-with-pill/input-with-pill.component.js +1 -1
- package/esm2015/lib/workflow-program/workflow-program.component.js +1 -1
- package/esm2015/lib/workflow-risk/workflow-risk.component.js +3 -3
- package/esm2015/lib/workflow-risk/workflow-risk.component.ngfactory.js +38 -39
- package/esm2015/lib/workflow-services/responsibility.service.js +3 -8
- package/esm2015/lib/workflow-survey-form/workflow-survey-form.component.js +1 -1
- package/esm2015/vcomply-workflow-engine.js +188 -189
- package/esm2015/vcomply-workflow-engine.ngsummary.json +1 -1
- package/fesm2015/vcomply-workflow-engine.js +229 -397
- package/fesm2015/vcomply-workflow-engine.js.map +1 -1
- package/lib/interfaces/confirmation-alert.d.ts +1 -0
- package/lib/sharedComponents/assessment-editor/services/validator.service.d.ts +1 -0
- package/lib/sharedComponents/floating-bar/floating-bar.component.d.ts +0 -2
- package/lib/sharedComponents/program-listing/program-listing.component.d.ts +1 -54
- package/lib/workflow-compliance/workflow-compliance.component.d.ts +103 -16
- package/lib/workflow-engine-container/workflow-engine-container.component.d.ts +1 -0
- package/lib/workflow-services/responsibility.service.d.ts +1 -1
- package/package.json +2 -2
- package/vcomply-workflow-engine.d.ts +187 -188
- package/vcomply-workflow-engine.metadata.json +1 -1
- package/esm2015/lib/sharedComponents/pipes/spaceTrim.pipe.js +0 -14
- package/esm2015/lib/sharedComponents/pipes/spaceTrim.pipe.ngsummary.json +0 -1
- package/lib/sharedComponents/pipes/spaceTrim.pipe.d.ts +0 -4
|
@@ -15,8 +15,6 @@ export declare class FloatingBarComponent implements OnInit, OnChanges {
|
|
|
15
15
|
selectedWorkflow: any;
|
|
16
16
|
workflowPlaceHolder: any;
|
|
17
17
|
mode: string;
|
|
18
|
-
defaultSelected: any;
|
|
19
|
-
set defaultSelectedValue(value: any);
|
|
20
18
|
nonRemovableUsersList: any;
|
|
21
19
|
removePosition: any;
|
|
22
20
|
closeEvent: EventEmitter<any>;
|
|
@@ -8,18 +8,10 @@ export declare class ProgramListingComponent implements OnInit {
|
|
|
8
8
|
loader: boolean;
|
|
9
9
|
programsList: any;
|
|
10
10
|
selectedProgram: any;
|
|
11
|
-
openedFrom: string;
|
|
12
11
|
selectedCategories: any[];
|
|
13
|
-
tempSelectedCategories: any;
|
|
14
|
-
set getSelectedCategories(category: any);
|
|
15
12
|
hideProgramsList: any;
|
|
16
|
-
mode: string;
|
|
17
13
|
searchProgram: any;
|
|
18
14
|
searchCategory: any;
|
|
19
|
-
preservedSelectedPrograms: any;
|
|
20
|
-
preservedProgramsId: any;
|
|
21
|
-
preservePrimaryProgram: any;
|
|
22
|
-
set getLinkedProgram(program: any);
|
|
23
15
|
previousSelectedValues: any;
|
|
24
16
|
programData: programList;
|
|
25
17
|
categoryData: categoryList;
|
|
@@ -38,13 +30,6 @@ export declare class ProgramListingComponent implements OnInit {
|
|
|
38
30
|
others: number;
|
|
39
31
|
};
|
|
40
32
|
displayConfirmationMessage: boolean;
|
|
41
|
-
tempPrimaryProgram: any;
|
|
42
|
-
primaryConfirmationMessage: string;
|
|
43
|
-
isPrimaryConfirmation: boolean;
|
|
44
|
-
isUncheckedProgram: boolean;
|
|
45
|
-
isPrimaryUnchecked: boolean;
|
|
46
|
-
selectedProgramsDetail: any;
|
|
47
|
-
selectedProgramsId: any;
|
|
48
33
|
saveSelectedProgram: EventEmitter<any>;
|
|
49
34
|
closeEvent: EventEmitter<any>;
|
|
50
35
|
allCategories: any[];
|
|
@@ -54,28 +39,6 @@ export declare class ProgramListingComponent implements OnInit {
|
|
|
54
39
|
handleSearch(event: any): void;
|
|
55
40
|
categorySearch(event: any): void;
|
|
56
41
|
selectProgram(event: any, program: any): void;
|
|
57
|
-
/**
|
|
58
|
-
* If the event is true, then push the program to the selectedProgramsDetail array. If the event is
|
|
59
|
-
* false, then remove the program from the selectedProgramsDetail array.
|
|
60
|
-
* @param {any} event - boolean
|
|
61
|
-
* @param {any} program - any = {
|
|
62
|
-
*/
|
|
63
|
-
updateSelectedPrograms(event: any, program: any): void;
|
|
64
|
-
/**
|
|
65
|
-
* If the currentProgram is set, then set the currentProgram to the program passed in, and set the
|
|
66
|
-
* tempPrimaryProgram to the currentProgram.
|
|
67
|
-
* If the currentProgram is not set, then set the currentProgram to the program passed in.
|
|
68
|
-
* @param {any} event - any - the event that is triggered when the user clicks on the checkbox
|
|
69
|
-
* @param {any} program - the program that is being selected
|
|
70
|
-
*/
|
|
71
|
-
setPrimaryProgram(event: any, program: any): void;
|
|
72
|
-
/**
|
|
73
|
-
* If the user clicks "Yes" on the confirmation modal, then the function will remove the program from
|
|
74
|
-
* the selectedProgramsDetail array and the selectedProgramsId array. If the user clicks "No" on the
|
|
75
|
-
* confirmation modal, then the function will do nothing.
|
|
76
|
-
* @param {boolean} event - boolean -> this is the value of the checkbox
|
|
77
|
-
*/
|
|
78
|
-
updatePrimaryProgram(event: boolean): void;
|
|
79
42
|
selectAllCategories(value: boolean): void;
|
|
80
43
|
checkCategoriesSelection(): "checked" | "unchecked" | "indeterminate";
|
|
81
44
|
openCategories(): void;
|
|
@@ -91,21 +54,5 @@ export declare class ProgramListingComponent implements OnInit {
|
|
|
91
54
|
save(): void;
|
|
92
55
|
saveChanges(value: boolean): void;
|
|
93
56
|
deleteEvent(event: any): void;
|
|
94
|
-
getSelectedProgramCount(
|
|
95
|
-
/**
|
|
96
|
-
* If the selectedProgram array has a length, then preserve the first element of the array as the
|
|
97
|
-
* preservePrimaryProgram variable. Otherwise, set the preservePrimaryProgram variable to an empty
|
|
98
|
-
* object.
|
|
99
|
-
*
|
|
100
|
-
* If the selectedProgramsId array has a length, then preserve the array as the preservedProgramsId
|
|
101
|
-
* variable. Otherwise, set the preservedProgramsId variable to an empty array.
|
|
102
|
-
*
|
|
103
|
-
* If the selectedProgramsDetail array has a length, then preserve the array as the
|
|
104
|
-
* preservedSelectedPrograms variable. Otherwise, set the preservedSelectedPrograms variable to an
|
|
105
|
-
* empty array.
|
|
106
|
-
*
|
|
107
|
-
* If the selectedProgram array does not have a length, then set the selectedProgramsDetail array to
|
|
108
|
-
* an empty array and the selectedProgramsId array to an empty array.
|
|
109
|
-
*/
|
|
110
|
-
preservePreviousDetails(): void;
|
|
57
|
+
getSelectedProgramCount(): void;
|
|
111
58
|
}
|
|
@@ -20,6 +20,12 @@ export declare class WorkflowComplianceComponent implements OnInit {
|
|
|
20
20
|
frameworkDetails: Array<any>;
|
|
21
21
|
isEntrust: boolean;
|
|
22
22
|
set closeOnEsc(escapeCondition: boolean);
|
|
23
|
+
openedFrom: any;
|
|
24
|
+
selectedRC: number;
|
|
25
|
+
selectedProgram: any;
|
|
26
|
+
onRemovingCheckpoint: EventEmitter<any>;
|
|
27
|
+
isAssessmentDisabled: EventEmitter<any>;
|
|
28
|
+
assigneeTypeChange: EventEmitter<any>;
|
|
23
29
|
pickerChanged: EventEmitter<any>;
|
|
24
30
|
populateOption: EventEmitter<any>;
|
|
25
31
|
hideElementsFromMoreOptions: EventEmitter<any>;
|
|
@@ -28,10 +34,6 @@ export declare class WorkflowComplianceComponent implements OnInit {
|
|
|
28
34
|
disconnectRefresh: EventEmitter<any>;
|
|
29
35
|
checkpointCountUpdated: EventEmitter<any>;
|
|
30
36
|
rcSelected: EventEmitter<any>;
|
|
31
|
-
openedFrom: any;
|
|
32
|
-
selectedRC: number;
|
|
33
|
-
selectedProgram: any;
|
|
34
|
-
set setSelectedProgram(program: any);
|
|
35
37
|
scrollToBottom: boolean;
|
|
36
38
|
description: EditorConfig;
|
|
37
39
|
programPeopleList: any;
|
|
@@ -72,7 +74,6 @@ export declare class WorkflowComplianceComponent implements OnInit {
|
|
|
72
74
|
moreOptions: any;
|
|
73
75
|
activeSelector: string;
|
|
74
76
|
sideSelectorElements: any;
|
|
75
|
-
displayList: {};
|
|
76
77
|
focus: {
|
|
77
78
|
responsibilityName: boolean;
|
|
78
79
|
description: boolean;
|
|
@@ -128,8 +129,9 @@ export declare class WorkflowComplianceComponent implements OnInit {
|
|
|
128
129
|
managePermission: boolean;
|
|
129
130
|
checkpointCount: number;
|
|
130
131
|
roleBasedPermissions: any;
|
|
131
|
-
|
|
132
|
-
|
|
132
|
+
isGroupAssigned: boolean;
|
|
133
|
+
responsibilityData: any;
|
|
134
|
+
originalAssignee: any;
|
|
133
135
|
whatInput: ElementRef;
|
|
134
136
|
unSubscribeProgram: Subject<void>;
|
|
135
137
|
constructor(authService: AuthService, responsibilityService: ResponsibilityService, frequencyService: FrequencyService, uiKitService: UiKitService, snackBar: SnackBarService, permission: AuthService, programService: ProgramsService);
|
|
@@ -162,10 +164,25 @@ export declare class WorkflowComplianceComponent implements OnInit {
|
|
|
162
164
|
assignFromFramework(freqObj: any): void;
|
|
163
165
|
refreshAllLists(): void;
|
|
164
166
|
refreshListsWhileProgramSelected(): void;
|
|
165
|
-
|
|
167
|
+
/**
|
|
168
|
+
* If the form is valid, then if the mode is EDIT, then set the organizationId and memberId to the
|
|
169
|
+
* authService values, and then call the entrustResponsibility function with the responsibilityForm as
|
|
170
|
+
* a parameter.
|
|
171
|
+
*
|
|
172
|
+
* If the mode is not EDIT, then call the entrustResponsibility function with the responsibilityForm
|
|
173
|
+
* as a parameter.
|
|
174
|
+
* @returns a boolean value.
|
|
175
|
+
*/
|
|
176
|
+
submitResponsibility(): false | undefined;
|
|
177
|
+
/**
|
|
178
|
+
* If the responsibility name is empty, or the frequency is empty, or the assignees list is empty,
|
|
179
|
+
* then return false. Otherwise, return true.
|
|
180
|
+
*/
|
|
166
181
|
validateResponsibility(): boolean | undefined;
|
|
167
|
-
responsibilityData: any;
|
|
168
182
|
entrustResponsibility(entrustForm: any): void;
|
|
183
|
+
/**
|
|
184
|
+
* It resets the form.
|
|
185
|
+
*/
|
|
169
186
|
reset(): void;
|
|
170
187
|
action(event: string): void;
|
|
171
188
|
viewResponsibilities(): void;
|
|
@@ -174,20 +191,96 @@ export declare class WorkflowComplianceComponent implements OnInit {
|
|
|
174
191
|
frequencyPopulation(event: any): void;
|
|
175
192
|
frequencyData(event: any): void;
|
|
176
193
|
checkBlank(data: string): string;
|
|
194
|
+
/**
|
|
195
|
+
* It takes a string and returns a string.
|
|
196
|
+
* @param {any} res - any = {
|
|
197
|
+
*/
|
|
177
198
|
getFrequencyPlaceholder(res: any): void;
|
|
199
|
+
/**
|
|
200
|
+
* It gets the frequency details and report id, then it sets the frequency placeholder to the frequency
|
|
201
|
+
* details and then it gets the on completion of responsibility and sets the frequency placeholder to
|
|
202
|
+
* the frequency details and the report name.
|
|
203
|
+
* @param {any} frequencyDetails - [0] => "1"
|
|
204
|
+
* @param {number} reportId - number
|
|
205
|
+
*/
|
|
178
206
|
getOnCompletionOf(frequencyDetails: any, reportId: number): void;
|
|
207
|
+
/**
|
|
208
|
+
* "If the frequencyDetails[3] is 1, then set the frequencyPlaceholder to 'Daily by ' + frequencyTime,
|
|
209
|
+
* otherwise if frequencyDetails[3] is greater than 1, then set the frequencyPlaceholder to 'Every ' +
|
|
210
|
+
* parseInt(frequencyDetails[3]) + ' days by ' + frequencyTime."
|
|
211
|
+
* @param {any} frequencyDetails - [0, 0, 0, 1]
|
|
212
|
+
* @param {any} frequencyTime - "12:00 AM"
|
|
213
|
+
*/
|
|
179
214
|
getDailyPlaceholder(frequencyDetails: any, frequencyTime: any): void;
|
|
215
|
+
/**
|
|
216
|
+
* It takes a string of comma separated numbers and returns a string of comma separated words.
|
|
217
|
+
*
|
|
218
|
+
* The function is called with a string of comma separated numbers, like this:
|
|
219
|
+
*
|
|
220
|
+
* getWeeklyPlaceholder(["1","2,3,4,5,6,7","1","1"], "10:00 AM")
|
|
221
|
+
*
|
|
222
|
+
* The function returns a string of comma separated words, like this:
|
|
223
|
+
*
|
|
224
|
+
* "Every Monday,Tuesday,Wednesday,Thursday,Friday,Saturday by 10:00 AM"</code>
|
|
225
|
+
* @param {any} frequencyDetails - ["1", "1,2,3,4,5", "", "1", ""]
|
|
226
|
+
* @param {any} frequencyTime - "10:00 AM"
|
|
227
|
+
*/
|
|
180
228
|
getWeeklyPlaceholder(frequencyDetails: any, frequencyTime: any): void;
|
|
229
|
+
/**
|
|
230
|
+
* It takes a string of comma separated numbers, converts them to month names, and then adds them to a
|
|
231
|
+
* sentence.
|
|
232
|
+
* @param {any} frequencyDetails - ["1", "1", "1,2,3,4,5,6,7,8,9,10,11,12"]
|
|
233
|
+
* @param {any} frequencyTime - "10:00 AM"
|
|
234
|
+
*/
|
|
181
235
|
getMonthlyPlaceholder(frequencyDetails: any, frequencyTime: any): void;
|
|
236
|
+
/**
|
|
237
|
+
* If the frequencyDetails[1] is 1, 2, 3, 21, 22, 23, or greater than 3, then set the
|
|
238
|
+
* frequencyPlaceholder to a string that includes the frequencyDetails[1] and the frequencyDetails[2]
|
|
239
|
+
* and the frequencyTime.
|
|
240
|
+
* @param {any} frequencyDetails - ["3", "1", "1,2,3"]
|
|
241
|
+
* @param {any} frequencyTime - "10:00 AM"
|
|
242
|
+
*/
|
|
182
243
|
getQuarterlyPlaceholder(frequencyDetails: any, frequencyTime: any): void;
|
|
244
|
+
/**
|
|
245
|
+
* It takes a string of comma separated numbers and returns a string of comma separated month names.
|
|
246
|
+
* @param {any} frequencyDetails - ["1", "1", "1,2,3,4,5,6,7,8,9,10,11,12"]
|
|
247
|
+
* @param {any} frequencyTime - "10:00 AM"
|
|
248
|
+
*/
|
|
183
249
|
getBiannualPlaceholder(frequencyDetails: any, frequencyTime: any): void;
|
|
250
|
+
/**
|
|
251
|
+
* If the frequencyDetails[1] is less than 2, then the frequencyPlaceholder is set to the 1st, 2nd,
|
|
252
|
+
* 3rd, or nth of every month by frequencyTime.
|
|
253
|
+
*
|
|
254
|
+
* If the frequencyDetails[1] is greater than 1, then the frequencyPlaceholder is set to the 1st, 2nd,
|
|
255
|
+
* 3rd, or nth of every month, Interval: every yearSequence years by frequencyTime.
|
|
256
|
+
* @param {any} frequencyDetails - ["Yearly", "1", "1", "1"]
|
|
257
|
+
* @param {any} frequencyTime - "10:00 AM"
|
|
258
|
+
*/
|
|
184
259
|
getYearlyPlaceholder(frequencyDetails: any, frequencyTime: any): void;
|
|
260
|
+
/**
|
|
261
|
+
* It takes a frequencyDetails array and a frequencyTime array and returns a string.
|
|
262
|
+
* @param {any} frequencyDetails - [4,1,1,1]
|
|
263
|
+
*/
|
|
185
264
|
getRandomPlaceholder(frequencyDetails: any, frequencyTime: any): void;
|
|
265
|
+
/**
|
|
266
|
+
* "When the user clicks the edit button, the edit button is hidden and the input field is shown.
|
|
267
|
+
* When the user clicks the input field, the input field is hidden and the edit button is shown."
|
|
268
|
+
* @param {any} event - any - the event that triggered the function
|
|
269
|
+
*/
|
|
186
270
|
onEditWhat(event: any): void;
|
|
271
|
+
/**
|
|
272
|
+
*
|
|
273
|
+
* The function is called with a parameter and returns an array of strings.
|
|
274
|
+
* @param {any} [res] - is the response from the API
|
|
275
|
+
*/
|
|
187
276
|
getEditMoreOptions(res?: any): void;
|
|
188
277
|
testFunction(): void;
|
|
189
278
|
reviewerTypeChange(event: any): void;
|
|
190
279
|
selectedSampleData(event: number): void;
|
|
280
|
+
/**
|
|
281
|
+
* It populates a list of assurance categories based on the test plan category selected.
|
|
282
|
+
* @param {any} testPlanCategory - any
|
|
283
|
+
*/
|
|
191
284
|
populateAssuranceList(testPlanCategory: any): void;
|
|
192
285
|
checkInputValue(event: any): boolean;
|
|
193
286
|
switchEnable(event: boolean): void;
|
|
@@ -205,11 +298,5 @@ export declare class WorkflowComplianceComponent implements OnInit {
|
|
|
205
298
|
*/
|
|
206
299
|
postAssessment(event: any): void;
|
|
207
300
|
setIsUploaded(event: any): void;
|
|
208
|
-
|
|
209
|
-
/**
|
|
210
|
-
* It takes an array of numbers and returns an array of unique numbers.
|
|
211
|
-
* @param {any} array - The array you want to get the unique values from.
|
|
212
|
-
* @returns An array of unique values.
|
|
213
|
-
*/
|
|
214
|
-
getUniqueIds(array: any): unknown[];
|
|
301
|
+
openAssigneeChangeConfirmation(event: any): void;
|
|
215
302
|
}
|
|
@@ -14,7 +14,7 @@ export declare class ResponsibilityService {
|
|
|
14
14
|
getOrganizationPeople(params?: HttpParams): import("rxjs").Observable<any[]>;
|
|
15
15
|
getAssignorsList(params?: HttpParams): import("rxjs").Observable<any[]>;
|
|
16
16
|
getCategoriesList(): import("rxjs").Observable<any[]>;
|
|
17
|
-
getProgramsList(params: HttpParams
|
|
17
|
+
getProgramsList(params: HttpParams): import("rxjs").Observable<any[]>;
|
|
18
18
|
getCategoriesUnderProgram(params: HttpParams): import("rxjs").Observable<any[]>;
|
|
19
19
|
getAssurance(): import("rxjs").Observable<any[]>;
|
|
20
20
|
getAssuranceForRequiresAudit(): import("rxjs").Observable<any[]>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vcomply-workflow-engine",
|
|
3
|
-
"version": "2.6.
|
|
3
|
+
"version": "2.6.21",
|
|
4
4
|
"peerDependencies": {
|
|
5
5
|
"@angular/common": "^12.0.1",
|
|
6
6
|
"@angular/core": "^12.0.1"
|
|
@@ -22,4 +22,4 @@
|
|
|
22
22
|
"typings": "vcomply-workflow-engine.d.ts",
|
|
23
23
|
"metadata": "vcomply-workflow-engine.metadata.json",
|
|
24
24
|
"sideEffects": false
|
|
25
|
-
}
|
|
25
|
+
}
|