aspose_tasks_cloud 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (79) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +22 -0
  3. data/README.md +49 -0
  4. data/aspose_tasks_cloud.gemspec +26 -0
  5. data/lib/aspose_tasks_cloud.rb +92 -0
  6. data/lib/aspose_tasks_cloud/api/tasks_api.rb +2585 -0
  7. data/lib/aspose_tasks_cloud/api_client.rb +335 -0
  8. data/lib/aspose_tasks_cloud/api_error.rb +24 -0
  9. data/lib/aspose_tasks_cloud/configuration.rb +166 -0
  10. data/lib/aspose_tasks_cloud/models/assignment_item.rb +61 -0
  11. data/lib/aspose_tasks_cloud/models/assignment_item_response.rb +61 -0
  12. data/lib/aspose_tasks_cloud/models/assignment_items.rb +47 -0
  13. data/lib/aspose_tasks_cloud/models/assignment_items_response.rb +61 -0
  14. data/lib/aspose_tasks_cloud/models/assignment_response.rb +61 -0
  15. data/lib/aspose_tasks_cloud/models/assignments_response.rb +61 -0
  16. data/lib/aspose_tasks_cloud/models/base_object.rb +86 -0
  17. data/lib/aspose_tasks_cloud/models/base_response.rb +53 -0
  18. data/lib/aspose_tasks_cloud/models/calendar.rb +89 -0
  19. data/lib/aspose_tasks_cloud/models/calendar_exception.rb +145 -0
  20. data/lib/aspose_tasks_cloud/models/calendar_exceptions_response.rb +63 -0
  21. data/lib/aspose_tasks_cloud/models/calendar_item.rb +53 -0
  22. data/lib/aspose_tasks_cloud/models/calendar_item_response.rb +61 -0
  23. data/lib/aspose_tasks_cloud/models/calendar_items.rb +47 -0
  24. data/lib/aspose_tasks_cloud/models/calendar_items_response.rb +61 -0
  25. data/lib/aspose_tasks_cloud/models/calendar_response.rb +61 -0
  26. data/lib/aspose_tasks_cloud/models/document_properties.rb +47 -0
  27. data/lib/aspose_tasks_cloud/models/document_properties_response.rb +61 -0
  28. data/lib/aspose_tasks_cloud/models/document_property.rb +53 -0
  29. data/lib/aspose_tasks_cloud/models/document_property_response.rb +61 -0
  30. data/lib/aspose_tasks_cloud/models/extended_attribute.rb +61 -0
  31. data/lib/aspose_tasks_cloud/models/extended_attribute_definition.rb +207 -0
  32. data/lib/aspose_tasks_cloud/models/extended_attribute_item.rb +53 -0
  33. data/lib/aspose_tasks_cloud/models/extended_attribute_items.rb +47 -0
  34. data/lib/aspose_tasks_cloud/models/extended_attribute_items_response.rb +61 -0
  35. data/lib/aspose_tasks_cloud/models/extended_attribute_response.rb +61 -0
  36. data/lib/aspose_tasks_cloud/models/link.rb +61 -0
  37. data/lib/aspose_tasks_cloud/models/outline_code.rb +53 -0
  38. data/lib/aspose_tasks_cloud/models/outline_code_definition.rb +145 -0
  39. data/lib/aspose_tasks_cloud/models/outline_code_item.rb +45 -0
  40. data/lib/aspose_tasks_cloud/models/outline_code_items.rb +47 -0
  41. data/lib/aspose_tasks_cloud/models/outline_code_items_response.rb +61 -0
  42. data/lib/aspose_tasks_cloud/models/outline_code_response.rb +61 -0
  43. data/lib/aspose_tasks_cloud/models/outline_mask.rb +61 -0
  44. data/lib/aspose_tasks_cloud/models/outline_value.rb +85 -0
  45. data/lib/aspose_tasks_cloud/models/recurring_info.rb +197 -0
  46. data/lib/aspose_tasks_cloud/models/recurring_info_response.rb +61 -0
  47. data/lib/aspose_tasks_cloud/models/resource.rb +945 -0
  48. data/lib/aspose_tasks_cloud/models/resource_assignment.rb +1063 -0
  49. data/lib/aspose_tasks_cloud/models/resource_assignments.rb +47 -0
  50. data/lib/aspose_tasks_cloud/models/resource_item.rb +61 -0
  51. data/lib/aspose_tasks_cloud/models/resource_item_response.rb +61 -0
  52. data/lib/aspose_tasks_cloud/models/resource_items.rb +47 -0
  53. data/lib/aspose_tasks_cloud/models/resource_items_response.rb +61 -0
  54. data/lib/aspose_tasks_cloud/models/resource_response.rb +61 -0
  55. data/lib/aspose_tasks_cloud/models/task.rb +1595 -0
  56. data/lib/aspose_tasks_cloud/models/task_document.rb +63 -0
  57. data/lib/aspose_tasks_cloud/models/task_document_response.rb +61 -0
  58. data/lib/aspose_tasks_cloud/models/task_item.rb +85 -0
  59. data/lib/aspose_tasks_cloud/models/task_item_response.rb +61 -0
  60. data/lib/aspose_tasks_cloud/models/task_items.rb +47 -0
  61. data/lib/aspose_tasks_cloud/models/task_items_response.rb +61 -0
  62. data/lib/aspose_tasks_cloud/models/task_link.rb +85 -0
  63. data/lib/aspose_tasks_cloud/models/task_link_response.rb +61 -0
  64. data/lib/aspose_tasks_cloud/models/task_links_response.rb +63 -0
  65. data/lib/aspose_tasks_cloud/models/task_response.rb +61 -0
  66. data/lib/aspose_tasks_cloud/models/value.rb +61 -0
  67. data/lib/aspose_tasks_cloud/models/wbs_code_mask.rb +61 -0
  68. data/lib/aspose_tasks_cloud/models/wbs_definition.rb +63 -0
  69. data/lib/aspose_tasks_cloud/models/wbs_definition_response.rb +61 -0
  70. data/lib/aspose_tasks_cloud/models/week_day.rb +71 -0
  71. data/lib/aspose_tasks_cloud/models/working_time.rb +45 -0
  72. data/lib/aspose_tasks_cloud/version.rb +3 -0
  73. data/test/data/ExtendedAttribute.mpp +0 -0
  74. data/test/data/Outlinecode.mpp +0 -0
  75. data/test/data/ResourceWithExtAttribs.xml +345 -0
  76. data/test/data/sample-project-2.mpp +0 -0
  77. data/test/data/sample-project.mpp +0 -0
  78. data/test/tasks_tests.rb +430 -0
  79. metadata +207 -0
@@ -0,0 +1,61 @@
1
+ module AsposeTasksCloud
2
+ #
3
+ class TaskLinkResponse < BaseObject
4
+ attr_accessor :task_link, :status, :code
5
+ # attribute mapping from ruby-style variable name to JSON key
6
+ def self.attribute_map
7
+ {
8
+
9
+ #
10
+ :'task_link' => :'TaskLink',
11
+
12
+ #
13
+ :'status' => :'Status',
14
+
15
+ #
16
+ :'code' => :'Code'
17
+
18
+ }
19
+ end
20
+
21
+ # attribute type
22
+ def self.swagger_types
23
+ {
24
+ :'task_link' => :'TaskLink',
25
+ :'status' => :'String',
26
+ :'code' => :'String'
27
+
28
+ }
29
+ end
30
+
31
+ def initialize(attributes = {})
32
+ return if !attributes.is_a?(Hash) || attributes.empty?
33
+
34
+ # convert string to symbol for hash key
35
+ attributes = attributes.inject({}){|memo,(k,v)| memo[k.to_sym] = v; memo}
36
+
37
+
38
+ if attributes[:'TaskLink']
39
+ self.task_link = attributes[:'TaskLink']
40
+ end
41
+
42
+ if attributes[:'Status']
43
+ self.status = attributes[:'Status']
44
+ end
45
+
46
+ if attributes[:'Code']
47
+ self.code = attributes[:'Code']
48
+ end
49
+
50
+ end
51
+
52
+ def status=(status)
53
+ allowed_values = ["Continue", "SwitchingProtocols", "OK", "Created", "Accepted", "NonAuthoritativeInformation", "NoContent", "ResetContent", "PartialContent", "MultipleChoices", "Ambiguous", "MovedPermanently", "Moved", "Found", "Redirect", "SeeOther", "RedirectMethod", "NotModified", "UseProxy", "Unused", "TemporaryRedirect", "RedirectKeepVerb", "BadRequest", "Unauthorized", "PaymentRequired", "Forbidden", "NotFound", "MethodNotAllowed", "NotAcceptable", "ProxyAuthenticationRequired", "RequestTimeout", "Conflict", "Gone", "LengthRequired", "PreconditionFailed", "RequestEntityTooLarge", "RequestUriTooLong", "UnsupportedMediaType", "RequestedRangeNotSatisfiable", "ExpectationFailed", "UpgradeRequired", "InternalServerError", "NotImplemented", "BadGateway", "ServiceUnavailable", "GatewayTimeout", "HttpVersionNotSupported"]
54
+ if status && !allowed_values.include?(status)
55
+ fail "invalid value for 'status', must be one of #{allowed_values}"
56
+ end
57
+ @status = status
58
+ end
59
+
60
+ end
61
+ end
@@ -0,0 +1,63 @@
1
+ module AsposeTasksCloud
2
+ #
3
+ class TaskLinksResponse < BaseObject
4
+ attr_accessor :task_links, :status, :code
5
+ # attribute mapping from ruby-style variable name to JSON key
6
+ def self.attribute_map
7
+ {
8
+
9
+ #
10
+ :'task_links' => :'TaskLinks',
11
+
12
+ #
13
+ :'status' => :'Status',
14
+
15
+ #
16
+ :'code' => :'Code'
17
+
18
+ }
19
+ end
20
+
21
+ # attribute type
22
+ def self.swagger_types
23
+ {
24
+ :'task_links' => :'Array<TaskLink>',
25
+ :'status' => :'String',
26
+ :'code' => :'String'
27
+
28
+ }
29
+ end
30
+
31
+ def initialize(attributes = {})
32
+ return if !attributes.is_a?(Hash) || attributes.empty?
33
+
34
+ # convert string to symbol for hash key
35
+ attributes = attributes.inject({}){|memo,(k,v)| memo[k.to_sym] = v; memo}
36
+
37
+
38
+ if attributes[:'TaskLinks']
39
+ if (value = attributes[:'TaskLinks']).is_a?(Array)
40
+ self.task_links = value
41
+ end
42
+ end
43
+
44
+ if attributes[:'Status']
45
+ self.status = attributes[:'Status']
46
+ end
47
+
48
+ if attributes[:'Code']
49
+ self.code = attributes[:'Code']
50
+ end
51
+
52
+ end
53
+
54
+ def status=(status)
55
+ allowed_values = ["Continue", "SwitchingProtocols", "OK", "Created", "Accepted", "NonAuthoritativeInformation", "NoContent", "ResetContent", "PartialContent", "MultipleChoices", "Ambiguous", "MovedPermanently", "Moved", "Found", "Redirect", "SeeOther", "RedirectMethod", "NotModified", "UseProxy", "Unused", "TemporaryRedirect", "RedirectKeepVerb", "BadRequest", "Unauthorized", "PaymentRequired", "Forbidden", "NotFound", "MethodNotAllowed", "NotAcceptable", "ProxyAuthenticationRequired", "RequestTimeout", "Conflict", "Gone", "LengthRequired", "PreconditionFailed", "RequestEntityTooLarge", "RequestUriTooLong", "UnsupportedMediaType", "RequestedRangeNotSatisfiable", "ExpectationFailed", "UpgradeRequired", "InternalServerError", "NotImplemented", "BadGateway", "ServiceUnavailable", "GatewayTimeout", "HttpVersionNotSupported"]
56
+ if status && !allowed_values.include?(status)
57
+ fail "invalid value for 'status', must be one of #{allowed_values}"
58
+ end
59
+ @status = status
60
+ end
61
+
62
+ end
63
+ end
@@ -0,0 +1,61 @@
1
+ module AsposeTasksCloud
2
+ #
3
+ class TaskResponse < BaseObject
4
+ attr_accessor :task, :status, :code
5
+ # attribute mapping from ruby-style variable name to JSON key
6
+ def self.attribute_map
7
+ {
8
+
9
+ #
10
+ :'task' => :'Task',
11
+
12
+ #
13
+ :'status' => :'Status',
14
+
15
+ #
16
+ :'code' => :'Code'
17
+
18
+ }
19
+ end
20
+
21
+ # attribute type
22
+ def self.swagger_types
23
+ {
24
+ :'task' => :'Task',
25
+ :'status' => :'String',
26
+ :'code' => :'String'
27
+
28
+ }
29
+ end
30
+
31
+ def initialize(attributes = {})
32
+ return if !attributes.is_a?(Hash) || attributes.empty?
33
+
34
+ # convert string to symbol for hash key
35
+ attributes = attributes.inject({}){|memo,(k,v)| memo[k.to_sym] = v; memo}
36
+
37
+
38
+ if attributes[:'Task']
39
+ self.task = attributes[:'Task']
40
+ end
41
+
42
+ if attributes[:'Status']
43
+ self.status = attributes[:'Status']
44
+ end
45
+
46
+ if attributes[:'Code']
47
+ self.code = attributes[:'Code']
48
+ end
49
+
50
+ end
51
+
52
+ def status=(status)
53
+ allowed_values = ["Continue", "SwitchingProtocols", "OK", "Created", "Accepted", "NonAuthoritativeInformation", "NoContent", "ResetContent", "PartialContent", "MultipleChoices", "Ambiguous", "MovedPermanently", "Moved", "Found", "Redirect", "SeeOther", "RedirectMethod", "NotModified", "UseProxy", "Unused", "TemporaryRedirect", "RedirectKeepVerb", "BadRequest", "Unauthorized", "PaymentRequired", "Forbidden", "NotFound", "MethodNotAllowed", "NotAcceptable", "ProxyAuthenticationRequired", "RequestTimeout", "Conflict", "Gone", "LengthRequired", "PreconditionFailed", "RequestEntityTooLarge", "RequestUriTooLong", "UnsupportedMediaType", "RequestedRangeNotSatisfiable", "ExpectationFailed", "UpgradeRequired", "InternalServerError", "NotImplemented", "BadGateway", "ServiceUnavailable", "GatewayTimeout", "HttpVersionNotSupported"]
54
+ if status && !allowed_values.include?(status)
55
+ fail "invalid value for 'status', must be one of #{allowed_values}"
56
+ end
57
+ @status = status
58
+ end
59
+
60
+ end
61
+ end
@@ -0,0 +1,61 @@
1
+ module AsposeTasksCloud
2
+ #
3
+ class Value < BaseObject
4
+ attr_accessor :id, :val, :description, :phonetic
5
+ # attribute mapping from ruby-style variable name to JSON key
6
+ def self.attribute_map
7
+ {
8
+
9
+ #
10
+ :'id' => :'Id',
11
+
12
+ #
13
+ :'val' => :'Val',
14
+
15
+ #
16
+ :'description' => :'Description',
17
+
18
+ #
19
+ :'phonetic' => :'Phonetic'
20
+
21
+ }
22
+ end
23
+
24
+ # attribute type
25
+ def self.swagger_types
26
+ {
27
+ :'id' => :'Integer',
28
+ :'val' => :'String',
29
+ :'description' => :'String',
30
+ :'phonetic' => :'String'
31
+
32
+ }
33
+ end
34
+
35
+ def initialize(attributes = {})
36
+ return if !attributes.is_a?(Hash) || attributes.empty?
37
+
38
+ # convert string to symbol for hash key
39
+ attributes = attributes.inject({}){|memo,(k,v)| memo[k.to_sym] = v; memo}
40
+
41
+
42
+ if attributes[:'Id']
43
+ self.id = attributes[:'Id']
44
+ end
45
+
46
+ if attributes[:'Val']
47
+ self.val = attributes[:'Val']
48
+ end
49
+
50
+ if attributes[:'Description']
51
+ self.description = attributes[:'Description']
52
+ end
53
+
54
+ if attributes[:'Phonetic']
55
+ self.phonetic = attributes[:'Phonetic']
56
+ end
57
+
58
+ end
59
+
60
+ end
61
+ end
@@ -0,0 +1,61 @@
1
+ module AsposeTasksCloud
2
+ #
3
+ class WBSCodeMask < BaseObject
4
+ attr_accessor :level, :length, :sequence, :separator
5
+ # attribute mapping from ruby-style variable name to JSON key
6
+ def self.attribute_map
7
+ {
8
+
9
+ #
10
+ :'level' => :'Level',
11
+
12
+ #
13
+ :'length' => :'Length',
14
+
15
+ #
16
+ :'sequence' => :'Sequence',
17
+
18
+ #
19
+ :'separator' => :'Separator'
20
+
21
+ }
22
+ end
23
+
24
+ # attribute type
25
+ def self.swagger_types
26
+ {
27
+ :'level' => :'Integer',
28
+ :'length' => :'String',
29
+ :'sequence' => :'String',
30
+ :'separator' => :'String'
31
+
32
+ }
33
+ end
34
+
35
+ def initialize(attributes = {})
36
+ return if !attributes.is_a?(Hash) || attributes.empty?
37
+
38
+ # convert string to symbol for hash key
39
+ attributes = attributes.inject({}){|memo,(k,v)| memo[k.to_sym] = v; memo}
40
+
41
+
42
+ if attributes[:'Level']
43
+ self.level = attributes[:'Level']
44
+ end
45
+
46
+ if attributes[:'Length']
47
+ self.length = attributes[:'Length']
48
+ end
49
+
50
+ if attributes[:'Sequence']
51
+ self.sequence = attributes[:'Sequence']
52
+ end
53
+
54
+ if attributes[:'Separator']
55
+ self.separator = attributes[:'Separator']
56
+ end
57
+
58
+ end
59
+
60
+ end
61
+ end
@@ -0,0 +1,63 @@
1
+ module AsposeTasksCloud
2
+ #
3
+ class WBSDefinition < BaseObject
4
+ attr_accessor :code_prefix, :generate_wbs_code, :verify_uniqueness, :code_mask_collection
5
+ # attribute mapping from ruby-style variable name to JSON key
6
+ def self.attribute_map
7
+ {
8
+
9
+ #
10
+ :'code_prefix' => :'CodePrefix',
11
+
12
+ #
13
+ :'generate_wbs_code' => :'GenerateWBSCode',
14
+
15
+ #
16
+ :'verify_uniqueness' => :'VerifyUniqueness',
17
+
18
+ #
19
+ :'code_mask_collection' => :'CodeMaskCollection'
20
+
21
+ }
22
+ end
23
+
24
+ # attribute type
25
+ def self.swagger_types
26
+ {
27
+ :'code_prefix' => :'String',
28
+ :'generate_wbs_code' => :'BOOLEAN',
29
+ :'verify_uniqueness' => :'BOOLEAN',
30
+ :'code_mask_collection' => :'Array<WBSCodeMask>'
31
+
32
+ }
33
+ end
34
+
35
+ def initialize(attributes = {})
36
+ return if !attributes.is_a?(Hash) || attributes.empty?
37
+
38
+ # convert string to symbol for hash key
39
+ attributes = attributes.inject({}){|memo,(k,v)| memo[k.to_sym] = v; memo}
40
+
41
+
42
+ if attributes[:'CodePrefix']
43
+ self.code_prefix = attributes[:'CodePrefix']
44
+ end
45
+
46
+ if attributes[:'GenerateWBSCode']
47
+ self.generate_wbs_code = attributes[:'GenerateWBSCode']
48
+ end
49
+
50
+ if attributes[:'VerifyUniqueness']
51
+ self.verify_uniqueness = attributes[:'VerifyUniqueness']
52
+ end
53
+
54
+ if attributes[:'CodeMaskCollection']
55
+ if (value = attributes[:'CodeMaskCollection']).is_a?(Array)
56
+ self.code_mask_collection = value
57
+ end
58
+ end
59
+
60
+ end
61
+
62
+ end
63
+ end
@@ -0,0 +1,61 @@
1
+ module AsposeTasksCloud
2
+ #
3
+ class WBSDefinitionResponse < BaseObject
4
+ attr_accessor :wbs_definition, :status, :code
5
+ # attribute mapping from ruby-style variable name to JSON key
6
+ def self.attribute_map
7
+ {
8
+
9
+ #
10
+ :'wbs_definition' => :'WBSDefinition',
11
+
12
+ #
13
+ :'status' => :'Status',
14
+
15
+ #
16
+ :'code' => :'Code'
17
+
18
+ }
19
+ end
20
+
21
+ # attribute type
22
+ def self.swagger_types
23
+ {
24
+ :'wbs_definition' => :'WBSDefinition',
25
+ :'status' => :'String',
26
+ :'code' => :'String'
27
+
28
+ }
29
+ end
30
+
31
+ def initialize(attributes = {})
32
+ return if !attributes.is_a?(Hash) || attributes.empty?
33
+
34
+ # convert string to symbol for hash key
35
+ attributes = attributes.inject({}){|memo,(k,v)| memo[k.to_sym] = v; memo}
36
+
37
+
38
+ if attributes[:'WBSDefinition']
39
+ self.wbs_definition = attributes[:'WBSDefinition']
40
+ end
41
+
42
+ if attributes[:'Status']
43
+ self.status = attributes[:'Status']
44
+ end
45
+
46
+ if attributes[:'Code']
47
+ self.code = attributes[:'Code']
48
+ end
49
+
50
+ end
51
+
52
+ def status=(status)
53
+ allowed_values = ["Continue", "SwitchingProtocols", "OK", "Created", "Accepted", "NonAuthoritativeInformation", "NoContent", "ResetContent", "PartialContent", "MultipleChoices", "Ambiguous", "MovedPermanently", "Moved", "Found", "Redirect", "SeeOther", "RedirectMethod", "NotModified", "UseProxy", "Unused", "TemporaryRedirect", "RedirectKeepVerb", "BadRequest", "Unauthorized", "PaymentRequired", "Forbidden", "NotFound", "MethodNotAllowed", "NotAcceptable", "ProxyAuthenticationRequired", "RequestTimeout", "Conflict", "Gone", "LengthRequired", "PreconditionFailed", "RequestEntityTooLarge", "RequestUriTooLong", "UnsupportedMediaType", "RequestedRangeNotSatisfiable", "ExpectationFailed", "UpgradeRequired", "InternalServerError", "NotImplemented", "BadGateway", "ServiceUnavailable", "GatewayTimeout", "HttpVersionNotSupported"]
54
+ if status && !allowed_values.include?(status)
55
+ fail "invalid value for 'status', must be one of #{allowed_values}"
56
+ end
57
+ @status = status
58
+ end
59
+
60
+ end
61
+ end
@@ -0,0 +1,71 @@
1
+ module AsposeTasksCloud
2
+ #
3
+ class WeekDay < BaseObject
4
+ attr_accessor :day_type, :day_working, :from_date, :to_date, :working_times
5
+ # attribute mapping from ruby-style variable name to JSON key
6
+ def self.attribute_map
7
+ {
8
+
9
+ #
10
+ :'day_type' => :'DayType',
11
+
12
+ #
13
+ :'day_working' => :'DayWorking',
14
+
15
+ #
16
+ :'from_date' => :'FromDate',
17
+
18
+ #
19
+ :'to_date' => :'ToDate',
20
+
21
+ #
22
+ :'working_times' => :'WorkingTimes'
23
+
24
+ }
25
+ end
26
+
27
+ # attribute type
28
+ def self.swagger_types
29
+ {
30
+ :'day_type' => :'String',
31
+ :'day_working' => :'BOOLEAN',
32
+ :'from_date' => :'String',
33
+ :'to_date' => :'String',
34
+ :'working_times' => :'Array<WorkingTime>'
35
+
36
+ }
37
+ end
38
+
39
+ def initialize(attributes = {})
40
+ return if !attributes.is_a?(Hash) || attributes.empty?
41
+
42
+ # convert string to symbol for hash key
43
+ attributes = attributes.inject({}){|memo,(k,v)| memo[k.to_sym] = v; memo}
44
+
45
+
46
+ if attributes[:'DayType']
47
+ self.day_type = attributes[:'DayType']
48
+ end
49
+
50
+ if attributes[:'DayWorking']
51
+ self.day_working = attributes[:'DayWorking']
52
+ end
53
+
54
+ if attributes[:'FromDate']
55
+ self.from_date = attributes[:'FromDate']
56
+ end
57
+
58
+ if attributes[:'ToDate']
59
+ self.to_date = attributes[:'ToDate']
60
+ end
61
+
62
+ if attributes[:'WorkingTimes']
63
+ if (value = attributes[:'WorkingTimes']).is_a?(Array)
64
+ self.working_times = value
65
+ end
66
+ end
67
+
68
+ end
69
+
70
+ end
71
+ end