| { |
| "type": "object", |
| "title": "Configuration", |
| "required": [ |
| "operational_policy", |
| "guard_policies" |
| ], |
| "properties": { |
| "operational_policy": { |
| "type": "object", |
| "title": "Related Parameters", |
| "required": [ |
| "controlLoop", |
| "policies" |
| ], |
| "properties": { |
| "controlLoop": { |
| "type": "object", |
| "title": "Control Loop details", |
| "required": [ |
| "timeout", |
| "abatement", |
| "trigger_policy", |
| "controlLoopName" |
| ], |
| "properties": { |
| "timeout": { |
| "type": "string", |
| "title": "Overall Time Limit", |
| "default": "0", |
| "format": "number" |
| }, |
| "abatement": { |
| "type": "string", |
| "title": "Abatement", |
| "enum": [ |
| "True", |
| "False" |
| ] |
| }, |
| "trigger_policy": { |
| "type": "string", |
| "title": "Policy Decision Entry" |
| }, |
| "controlLoopName": { |
| "type": "string", |
| "title": "Control loop name", |
| "readOnly": "True" |
| } |
| } |
| }, |
| "policies": { |
| "uniqueItems": "true", |
| "id": "policies_array", |
| "type": "array", |
| "title": "Policy Decision Tree", |
| "format": "tabs-top", |
| "items": { |
| "title": "Policy Decision", |
| "type": "object", |
| "id": "policy_item", |
| "headerTemplate": "{{self.id}} - {{self.recipe}}", |
| "format": "categories", |
| "basicCategoryTitle": "recipe", |
| "required": [ |
| "id", |
| "retry", |
| "timeout", |
| "actor", |
| "success", |
| "failure", |
| "failure_timeout", |
| "failure_retries", |
| "failure_exception", |
| "failure_guard", |
| "target" |
| ], |
| "properties": { |
| "id": { |
| "default": "Policy 1", |
| "title": "Policy ID", |
| "type": "string" |
| }, |
| "retry": { |
| "default": "0", |
| "title": "Number of Retry", |
| "type": "string", |
| "format": "number" |
| }, |
| "timeout": { |
| "default": "0", |
| "title": "Timeout", |
| "type": "string", |
| "format": "number" |
| }, |
| "actor": { |
| "type": "object", |
| "title": "Actor", |
| "anyOf": [ |
| { |
| "title": "APPC", |
| "type": "object", |
| "properties": { |
| "actor": { |
| "title": "actor", |
| "type": "string", |
| "default": "APPC", |
| "options": { |
| "hidden": true |
| } |
| }, |
| "recipe": { |
| "title": "recipe", |
| "type": "string", |
| "default": "", |
| "enum": [ |
| "Restart", |
| "Rebuild", |
| "Migrate", |
| "Health-Check", |
| "ModifyConfig" |
| ] |
| }, |
| "payload": { |
| "title": "Payload (YAML)", |
| "type": "string", |
| "format": "textarea" |
| } |
| } |
| }, |
| { |
| "title": "SO", |
| "type": "object", |
| "properties": { |
| "actor": { |
| "title": "actor", |
| "type": "string", |
| "default": "SO", |
| "options": { |
| "hidden": true |
| } |
| }, |
| "recipe": { |
| "title": "recipe", |
| "type": "string", |
| "default": "", |
| "enum": [ |
| "VF Module Create", |
| "VF Module Delete" |
| ] |
| }, |
| "payload": { |
| "title": "Payload (YAML)", |
| "type": "string", |
| "format": "textarea" |
| } |
| } |
| }, |
| { |
| "title": "SDNC", |
| "type": "object", |
| "properties": { |
| "actor": { |
| "title": "actor", |
| "type": "string", |
| "default": "SDNC", |
| "options": { |
| "hidden": true |
| } |
| }, |
| "recipe": { |
| "title": "recipe", |
| "type": "string", |
| "default": "", |
| "enum": [ |
| "Reroute", |
| "BandwidthOnDemand" |
| ] |
| }, |
| "payload": { |
| "title": "Payload (YAML)", |
| "type": "string", |
| "format": "textarea" |
| } |
| } |
| }, |
| { |
| "title": "VFC", |
| "type": "object", |
| "properties": { |
| "actor": { |
| "title": "actor", |
| "type": "string", |
| "default": "VFC", |
| "options": { |
| "hidden": true |
| } |
| }, |
| "recipe": { |
| "title": "recipe", |
| "type": "string", |
| "default": "", |
| "enum": [ |
| "ModifyConfig" |
| ] |
| }, |
| "payload": { |
| "title": "Payload (YAML)", |
| "type": "string", |
| "format": "textarea" |
| } |
| } |
| }, |
| { |
| "title": "CDS", |
| "type": "object", |
| "properties": { |
| "actor": { |
| "title": "actor", |
| "type": "string", |
| "default": "CDS", |
| "options": { |
| "hidden": true |
| } |
| }, |
| "recipe": { |
| "title": "recipe", |
| "type": "object", |
| "anyOf": [ |
| { |
| "title": "user-defined", |
| "type": "object", |
| "properties": { |
| "recipe": { |
| "title": "recipe", |
| "type": "string", |
| "default": "user-defined", |
| "format": "textarea" |
| }, |
| "payload": { |
| "title": "Payload (YAML)", |
| "type": "string", |
| "default": "", |
| "format": "textarea" |
| } |
| } |
| }, |
| { |
| "title": "resource-assignment", |
| "type": "object", |
| "properties": { |
| "recipe": { |
| "title": "recipe", |
| "type": "string", |
| "default": "resource-assignment", |
| "options": { |
| "hidden": true |
| } |
| }, |
| "payload": { |
| "title": "Payload", |
| "type": "object", |
| "properties": { |
| "artifact_name": { |
| "title": "artifact name", |
| "type": "string", |
| "default": "baseconfiguration", |
| "readOnly": "True" |
| }, |
| "artifact_version": { |
| "title": "artifact version", |
| "type": "string", |
| "default": "1.0.0", |
| "readOnly": "True" |
| }, |
| "mode": { |
| "title": "mode", |
| "type": "string", |
| "default": "async" |
| }, |
| "data": { |
| "title": "data", |
| "properties": { |
| "request-id": { |
| "title": "request-id", |
| "type": "string" |
| }, |
| "service-instance-id": { |
| "title": "service-instance-id", |
| "type": "string" |
| }, |
| "vnf-id": { |
| "title": "vnf-id", |
| "type": "string" |
| }, |
| "action-name": { |
| "title": "action-name", |
| "type": "string" |
| }, |
| "scope-type": { |
| "title": "scope-type", |
| "type": "string" |
| }, |
| "hostname": { |
| "title": "hostname", |
| "type": "string" |
| }, |
| "vnf_name": { |
| "title": "vnf_name", |
| "type": "string" |
| } |
| } |
| } |
| } |
| } |
| } |
| }, |
| { |
| "title": "activate", |
| "type": "object", |
| "properties": { |
| "recipe": { |
| "title": "recipe", |
| "type": "string", |
| "default": "activate", |
| "options": { |
| "hidden": true |
| } |
| }, |
| "payload": { |
| "title": "Payload", |
| "type": "object", |
| "properties": { |
| "artifact_name": { |
| "title": "artifact name", |
| "type": "string", |
| "default": "baseconfiguration", |
| "readOnly": "True" |
| }, |
| "artifact_version": { |
| "title": "artifact version", |
| "type": "string", |
| "default": "1.0.0", |
| "readOnly": "True" |
| }, |
| "mode": { |
| "title": "mode", |
| "type": "string", |
| "default": "async" |
| }, |
| "data": { |
| "title": "data", |
| "properties": { |
| "request-id": { |
| "title": "request-id", |
| "type": "string" |
| }, |
| "service-instance-id": { |
| "title": "service-instance-id", |
| "type": "string" |
| }, |
| "vnf-id": { |
| "title": "vnf-id", |
| "type": "string" |
| }, |
| "action-name": { |
| "title": "action-name", |
| "type": "string" |
| }, |
| "scope-type": { |
| "title": "scope-type", |
| "type": "string" |
| }, |
| "hostname": { |
| "title": "hostname", |
| "type": "string" |
| }, |
| "vnf_name": { |
| "title": "vnf_name", |
| "type": "string" |
| } |
| } |
| } |
| } |
| } |
| } |
| }, |
| { |
| "title": "activate-restconf", |
| "type": "object", |
| "properties": { |
| "recipe": { |
| "title": "recipe", |
| "type": "string", |
| "default": "activate-restconf", |
| "options": { |
| "hidden": true |
| } |
| }, |
| "payload": { |
| "title": "Payload", |
| "type": "object", |
| "properties": { |
| "artifact_name": { |
| "title": "artifact name", |
| "type": "string", |
| "default": "baseconfiguration", |
| "readOnly": "True" |
| }, |
| "artifact_version": { |
| "title": "artifact version", |
| "type": "string", |
| "default": "1.0.0", |
| "readOnly": "True" |
| }, |
| "mode": { |
| "title": "mode", |
| "type": "string", |
| "default": "async" |
| }, |
| "data": { |
| "title": "data", |
| "properties": { |
| "request-id": { |
| "title": "request-id", |
| "type": "string" |
| }, |
| "service-instance-id": { |
| "title": "service-instance-id", |
| "type": "string" |
| }, |
| "vnf-id": { |
| "title": "vnf-id", |
| "type": "string" |
| }, |
| "action-name": { |
| "title": "action-name", |
| "type": "string" |
| }, |
| "scope-type": { |
| "title": "scope-type", |
| "type": "string" |
| }, |
| "hostname": { |
| "title": "hostname", |
| "type": "string" |
| }, |
| "vnf_name": { |
| "title": "vnf_name", |
| "type": "string" |
| } |
| } |
| } |
| } |
| } |
| } |
| }, |
| { |
| "title": "activate-cli", |
| "type": "object", |
| "properties": { |
| "recipe": { |
| "title": "recipe", |
| "type": "string", |
| "default": "activate-cli", |
| "options": { |
| "hidden": true |
| } |
| }, |
| "payload": { |
| "title": "Payload", |
| "type": "object", |
| "properties": { |
| "artifact_name": { |
| "title": "artifact name", |
| "type": "string", |
| "default": "baseconfiguration", |
| "readOnly": "True" |
| }, |
| "artifact_version": { |
| "title": "artifact version", |
| "type": "string", |
| "default": "1.0.0", |
| "readOnly": "True" |
| }, |
| "mode": { |
| "title": "mode", |
| "type": "string", |
| "default": "async" |
| }, |
| "data": { |
| "title": "data", |
| "properties": { |
| "request-id": { |
| "title": "request-id", |
| "type": "string" |
| }, |
| "service-instance-id": { |
| "title": "service-instance-id", |
| "type": "string" |
| }, |
| "vnf-id": { |
| "title": "vnf-id", |
| "type": "string" |
| }, |
| "action-name": { |
| "title": "action-name", |
| "type": "string" |
| }, |
| "scope-type": { |
| "title": "scope-type", |
| "type": "string" |
| }, |
| "hostname": { |
| "title": "hostname", |
| "type": "string" |
| }, |
| "vnf_name": { |
| "title": "vnf_name", |
| "type": "string" |
| } |
| } |
| } |
| } |
| } |
| } |
| }, |
| { |
| "title": "assign-activate", |
| "type": "object", |
| "properties": { |
| "recipe": { |
| "title": "recipe", |
| "type": "string", |
| "default": "assign-activate", |
| "options": { |
| "hidden": true |
| } |
| }, |
| "payload": { |
| "title": "Payload", |
| "type": "object", |
| "properties": { |
| "artifact_name": { |
| "title": "artifact name", |
| "type": "string", |
| "default": "baseconfiguration", |
| "readOnly": "True" |
| }, |
| "artifact_version": { |
| "title": "artifact version", |
| "type": "string", |
| "default": "1.0.0", |
| "readOnly": "True" |
| }, |
| "mode": { |
| "title": "mode", |
| "type": "string", |
| "default": "async" |
| }, |
| "data": { |
| "title": "data", |
| "properties": { |
| "request-id": { |
| "title": "request-id", |
| "type": "string" |
| }, |
| "service-instance-id": { |
| "title": "service-instance-id", |
| "type": "string" |
| }, |
| "vnf-id": { |
| "title": "vnf-id", |
| "type": "string" |
| }, |
| "action-name": { |
| "title": "action-name", |
| "type": "string" |
| }, |
| "scope-type": { |
| "title": "scope-type", |
| "type": "string" |
| }, |
| "hostname": { |
| "title": "hostname", |
| "type": "string" |
| }, |
| "vnf_name": { |
| "title": "vnf_name", |
| "type": "string" |
| } |
| } |
| } |
| } |
| } |
| } |
| }, |
| { |
| "title": "imperative-test-wf", |
| "type": "object", |
| "properties": { |
| "recipe": { |
| "title": "recipe", |
| "type": "string", |
| "default": "imperative-test-wf", |
| "options": { |
| "hidden": true |
| } |
| }, |
| "payload": { |
| "title": "Payload", |
| "type": "object", |
| "properties": { |
| "artifact_name": { |
| "title": "artifact name", |
| "type": "string", |
| "default": "baseconfiguration", |
| "readOnly": "True" |
| }, |
| "artifact_version": { |
| "title": "artifact version", |
| "type": "string", |
| "default": "1.0.0", |
| "readOnly": "True" |
| }, |
| "mode": { |
| "title": "mode", |
| "type": "string", |
| "default": "async" |
| }, |
| "data": { |
| "title": "data", |
| "properties": { |
| "request-id": { |
| "title": "request-id", |
| "type": "string" |
| }, |
| "service-instance-id": { |
| "title": "service-instance-id", |
| "type": "string" |
| }, |
| "vnf-id": { |
| "title": "vnf-id", |
| "type": "string" |
| }, |
| "action-name": { |
| "title": "action-name", |
| "type": "string" |
| }, |
| "scope-type": { |
| "title": "scope-type", |
| "type": "string" |
| }, |
| "hostname": { |
| "title": "hostname", |
| "type": "string" |
| }, |
| "vnf_name": { |
| "title": "vnf_name", |
| "type": "string" |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| ] |
| } |
| } |
| } |
| ] |
| }, |
| "success": { |
| "default": "final_success", |
| "title": "When Success", |
| "type": "string" |
| }, |
| "failure": { |
| "default": "final_failure", |
| "title": "When Failure", |
| "type": "string" |
| }, |
| "failure_timeout": { |
| "default": "final_failure_timeout", |
| "title": "When Failure Timeout", |
| "type": "string" |
| }, |
| "failure_retries": { |
| "default": "final_failure_retries", |
| "title": "When Failure Retries", |
| "type": "string" |
| }, |
| "failure_exception": { |
| "default": "final_failure_exception", |
| "title": "When Failure Exception", |
| "type": "string" |
| }, |
| "failure_guard": { |
| "default": "final_failure_guard", |
| "title": "When Failure Guard", |
| "type": "string" |
| }, |
| "target": { |
| "type": "object", |
| "required": [ |
| "type", |
| "resourceID" |
| ], |
| "anyOf": [ |
| { |
| "title": "User Defined", |
| "additionalProperties": "True", |
| "properties": { |
| "type": { |
| "title": "Target type", |
| "type": "string", |
| "default": "", |
| "enum": [ |
| "VNF", |
| "VFMODULE", |
| "VM" |
| ] |
| }, |
| "resourceID": { |
| "title": "Target type", |
| "type": "string", |
| "default": "" |
| } |
| } |
| }, |
| { |
| "title": "VNF-vLoadBalancerMS 0", |
| "properties": { |
| "type": { |
| "title": "Type", |
| "type": "string", |
| "default": "VNF", |
| "readOnly": "True" |
| }, |
| "resourceID": { |
| "title": "Resource ID", |
| "type": "string", |
| "default": "vLoadBalancerMS", |
| "readOnly": "True" |
| } |
| } |
| }, |
| { |
| "title": "VFMODULE-Vloadbalancerms..vpkg..module-1", |
| "properties": { |
| "type": { |
| "title": "Type", |
| "type": "string", |
| "default": "VFMODULE", |
| "readOnly": "True" |
| }, |
| "resourceID": { |
| "title": "Resource ID", |
| "type": "string", |
| "default": "Vloadbalancerms..vpkg..module-1", |
| "readOnly": "True" |
| }, |
| "modelInvariantId": { |
| "title": "Model Invariant Id (ModelInvariantUUID)", |
| "type": "string", |
| "default": "ca052563-eb92-4b5b-ad41-9111768ce043", |
| "readOnly": "True" |
| }, |
| "modelVersionId": { |
| "title": "Model Version Id (ModelUUID)", |
| "type": "string", |
| "default": "1e725ccc-b823-4f67-82b9-4f4367070dbc", |
| "readOnly": "True" |
| }, |
| "modelName": { |
| "title": "Model Name", |
| "type": "string", |
| "default": "Vloadbalancerms..vpkg..module-1", |
| "readOnly": "True" |
| }, |
| "modelVersion": { |
| "title": "Model Version", |
| "type": "string", |
| "default": "1", |
| "readOnly": "True" |
| }, |
| "modelCustomizationId": { |
| "title": "Customization ID", |
| "type": "string", |
| "default": "1bffdc31-a37d-4dee-b65c-dde623a76e52", |
| "readOnly": "True" |
| } |
| } |
| }, |
| { |
| "title": "VFMODULE-Vloadbalancerms..vdns..module-3", |
| "properties": { |
| "type": { |
| "title": "Type", |
| "type": "string", |
| "default": "VFMODULE", |
| "readOnly": "True" |
| }, |
| "resourceID": { |
| "title": "Resource ID", |
| "type": "string", |
| "default": "Vloadbalancerms..vdns..module-3", |
| "readOnly": "True" |
| }, |
| "modelInvariantId": { |
| "title": "Model Invariant Id (ModelInvariantUUID)", |
| "type": "string", |
| "default": "4c10ba9b-f88f-415e-9de3-5d33336047fa", |
| "readOnly": "True" |
| }, |
| "modelVersionId": { |
| "title": "Model Version Id (ModelUUID)", |
| "type": "string", |
| "default": "4fa73b49-8a6c-493e-816b-eb401567b720", |
| "readOnly": "True" |
| }, |
| "modelName": { |
| "title": "Model Name", |
| "type": "string", |
| "default": "Vloadbalancerms..vdns..module-3", |
| "readOnly": "True" |
| }, |
| "modelVersion": { |
| "title": "Model Version", |
| "type": "string", |
| "default": "1", |
| "readOnly": "True" |
| }, |
| "modelCustomizationId": { |
| "title": "Customization ID", |
| "type": "string", |
| "default": "bafcdab0-801d-4d81-9ead-f464640a38b1", |
| "readOnly": "True" |
| } |
| } |
| }, |
| { |
| "title": "VFMODULE-Vloadbalancerms..base_template..module-0", |
| "properties": { |
| "type": { |
| "title": "Type", |
| "type": "string", |
| "default": "VFMODULE", |
| "readOnly": "True" |
| }, |
| "resourceID": { |
| "title": "Resource ID", |
| "type": "string", |
| "default": "Vloadbalancerms..base_template..module-0", |
| "readOnly": "True" |
| }, |
| "modelInvariantId": { |
| "title": "Model Invariant Id (ModelInvariantUUID)", |
| "type": "string", |
| "default": "921f7c96-ebdd-42e6-81b9-1cfc0c9796f3", |
| "readOnly": "True" |
| }, |
| "modelVersionId": { |
| "title": "Model Version Id (ModelUUID)", |
| "type": "string", |
| "default": "63734409-f745-4e4d-a38b-131638a0edce", |
| "readOnly": "True" |
| }, |
| "modelName": { |
| "title": "Model Name", |
| "type": "string", |
| "default": "Vloadbalancerms..base_template..module-0", |
| "readOnly": "True" |
| }, |
| "modelVersion": { |
| "title": "Model Version", |
| "type": "string", |
| "default": "1", |
| "readOnly": "True" |
| }, |
| "modelCustomizationId": { |
| "title": "Customization ID", |
| "type": "string", |
| "default": "86baddea-c730-4fb8-9410-cd2e17fd7f27", |
| "readOnly": "True" |
| } |
| } |
| }, |
| { |
| "title": "VFMODULE-Vloadbalancerms..vlb..module-2", |
| "properties": { |
| "type": { |
| "title": "Type", |
| "type": "string", |
| "default": "VFMODULE", |
| "readOnly": "True" |
| }, |
| "resourceID": { |
| "title": "Resource ID", |
| "type": "string", |
| "default": "Vloadbalancerms..vlb..module-2", |
| "readOnly": "True" |
| }, |
| "modelInvariantId": { |
| "title": "Model Invariant Id (ModelInvariantUUID)", |
| "type": "string", |
| "default": "a772a1f4-0064-412c-833d-4749b15828dd", |
| "readOnly": "True" |
| }, |
| "modelVersionId": { |
| "title": "Model Version Id (ModelUUID)", |
| "type": "string", |
| "default": "0f5c3f6a-650a-4303-abb6-fff3e573a07a", |
| "readOnly": "True" |
| }, |
| "modelName": { |
| "title": "Model Name", |
| "type": "string", |
| "default": "Vloadbalancerms..vlb..module-2", |
| "readOnly": "True" |
| }, |
| "modelVersion": { |
| "title": "Model Version", |
| "type": "string", |
| "default": "1", |
| "readOnly": "True" |
| }, |
| "modelCustomizationId": { |
| "title": "Customization ID", |
| "type": "string", |
| "default": "96a78aad-4ffb-4ef0-9c4f-deb03bf1d806", |
| "readOnly": "True" |
| } |
| } |
| } |
| ] |
| } |
| } |
| } |
| } |
| } |
| }, |
| "guard_policies": { |
| "type": "array", |
| "format": "tabs-top", |
| "title": "Associated Guard policies", |
| "items": { |
| "headerTemplate": "{{self.policy-id}} - {{self.content.recipe}}", |
| "anyOf": [ |
| { |
| "title": "Guard MinMax", |
| "type": "object", |
| "properties": { |
| "policy-id": { |
| "type": "string", |
| "default": "guard.minmax.new", |
| "pattern": "^(guard.minmax\\..*)$" |
| }, |
| "content": { |
| "properties": { |
| "actor": { |
| "type": "string", |
| "enum": [ |
| "APPC", |
| "SO", |
| "VFC", |
| "SDNC", |
| "SDNR" |
| ] |
| }, |
| "recipe": { |
| "type": "string", |
| "enum": [ |
| "Restart", |
| "Rebuild", |
| "Migrate", |
| "Health-Check", |
| "ModifyConfig", |
| "VF Module Create", |
| "VF Module Delete", |
| "Reroute" |
| ] |
| }, |
| "targets": { |
| "type": "string", |
| "default": ".*" |
| }, |
| "clname": { |
| "type": "string", |
| "template": "{{loopName}}", |
| "watch": { |
| "loopName": "operational_policy.controlLoop.controlLoopName" |
| } |
| }, |
| "guardActiveStart": { |
| "type": "string", |
| "default": "00:00:00Z" |
| }, |
| "guardActiveEnd": { |
| "type": "string", |
| "default": "10:00:00Z" |
| }, |
| "min": { |
| "type": "string", |
| "default": "0" |
| }, |
| "max": { |
| "type": "string", |
| "default": "1" |
| } |
| } |
| } |
| } |
| }, |
| { |
| "title": "Guard Frequency", |
| "type": "object", |
| "properties": { |
| "policy-id": { |
| "type": "string", |
| "default": "guard.frequency.new", |
| "pattern": "^(guard.frequency\\..*)$" |
| }, |
| "content": { |
| "properties": { |
| "actor": { |
| "type": "string", |
| "enum": [ |
| "APPC", |
| "SO", |
| "VFC", |
| "SDNC", |
| "SDNR" |
| ] |
| }, |
| "recipe": { |
| "type": "string", |
| "enum": [ |
| "Restart", |
| "Rebuild", |
| "Migrate", |
| "Health-Check", |
| "ModifyConfig", |
| "VF Module Create", |
| "VF Module Delete", |
| "Reroute" |
| ] |
| }, |
| "targets": { |
| "type": "string", |
| "default": ".*" |
| }, |
| "clname": { |
| "type": "string", |
| "template": "{{loopName}}", |
| "watch": { |
| "loopName": "operational_policy.controlLoop.controlLoopName" |
| } |
| }, |
| "guardActiveStart": { |
| "type": "string", |
| "default": "00:00:00Z" |
| }, |
| "guardActiveEnd": { |
| "type": "string", |
| "default": "10:00:00Z" |
| }, |
| "limit": { |
| "type": "string" |
| }, |
| "timeWindow": { |
| "type": "string" |
| }, |
| "timeUnits": { |
| "type": "string", |
| "enum": [ |
| "minute", |
| "hour", |
| "day", |
| "week", |
| "month", |
| "year" |
| ] |
| } |
| } |
| } |
| } |
| } |
| ] |
| } |
| } |
| } |
| } |