Skip to content

Commit

Permalink
Modified yaml scripts Jan 09 (#31312)
Browse files Browse the repository at this point in the history
* modified files as per latest test-plan.
PICS.yaml
TC_ACE_1_1
TC_ACE_1_5
TC_ACFREMON_1_1
TC_ACFREMON_2_1
TC_ACL_2_1
TC_ACL_2_10
TC_ACL_2_3
TC_ACL_2_9
TC_AIRQUAL_1_1
TC_AIRQUAL_2_1
TC_ALOGIN_1_12
TC_APBSC_1_10
TC_APBSC_9_1
TC_APPLAUNCHER_1_3
TC_APPLAUNCHER_3_5
TC_APPLAUNCHER_3_7
TC_APPLAUNCHER_3_8
TC_APPLAUNCHER_3_9
TC_AUDIOOUTPUT_1_8
TC_AUDIOOUTPUT_7_1
TC_AUDIOOUTPUT_7_2
TC_BINFO_1_1
TC_BINFO_2_1
TC_BINFO_2_2
TC_BOOL_2_1
TC_BRBINFO_1_1
TC_BRBINFO_2_1
TC_CADMIN_1_10
TC_CADMIN_1_16
TC_CC_2_1
TC_CC_5_1
TC_CC_6_1
TC_CNET_1_3
TC_CNET_4_5
TC_CNET_4_9
TC_CONTENTLAUNCHER_1_11
TC_DD_1_8
TC_DD_3_1
TC_DD_3_2
TC_DGETH_2_1
TC_DGGEN_1_1
TC_DGGEN_2_1
TC_DGGEN_2_3
TC_DGTHREAD_1_1
TC_DGTHREAD_2_4
TC_DGWIFI_2_1
TC_DGWIFI_2_3
TC_DISHM_2_1
TC_DISHM_3_1
TC_DISHM_3_2
TC_DISHM_3_3
TC_DRLK_2_1
TC_DRLK_2_10
TC_DRLK_2_5
TC_DRLK_2_6
TC_DRLK_2_7
TC_DRLK_2_9
TC_FAN_1_1
TC_FAN_2_1
TC_FAN_2_2
TC_FAN_2_3
TC_FAN_2_4
TC_FAN_2_5
TC_FAN_3_1
TC_FAN_3_2
TC_FAN_3_6
TC_FLABEL_1_1
TC_FLABEL_2_1
TC_FLDCONC_1_1
TC_FLDCONC_2_1
TC_FLW_1_1
TC_FLW_2_1
TC_FLW_2_2
TC_GRPKEY_1_1
TC_GRPKEY_2_1
TC_GRPKEY_2_2
TC_G_1_1
TC_G_2_1
TC_G_2_3
TC_G_2_4
TC_HEPAFREMON_1_1
TC_HEPAFREMON_2_1
TC_ICDM_1_1
TC_IDM_1_1
TC_IDM_2_1
TC_IDM_2_2
TC_IDM_3_1
TC_IDM_3_2
TC_ILL_1_1
TC_ILL_2_1
TC_ILL_2_2
TC_I_1_1
TC_I_2_1
TC_I_2_2
TC_I_2_3
TC_KEYPADINPUT_1_2
TC_KEYPADINPUT_3_3
TC_LCFG_1_1
TC_LCFG_2_1
TC_LOWPOWER_1_1
TC_LOWPOWER_2_1
TC_LTIME_1_2
TC_LTIME_3_1
TC_LUNIT_1_2
TC_LUNIT_3_1
TC_LVL_1_1
TC_LVL_2_1
TC_LVL_2_2
TC_LVL_3_1
TC_LVL_4_1
TC_LVL_5_1
TC_LVL_6_1
TC_LVL_7_1
TC_LWM_1_1
TC_LWM_2_1
TC_LWM_3_1
TC_LWM_3_2
TC_LWM_3_3
TC_MEDIAINPUT_1_4
TC_MEDIAINPUT_3_10
TC_MEDIAINPUT_3_11
TC_MEDIAINPUT_3_12
TC_MEDIAINPUT_3_13
TC_MEDIAPLAYBACK_1_7
TC_MEDIAPLAYBACK_6_1
TC_MEDIAPLAYBACK_6_2
TC_MEDIAPLAYBACK_6_3
TC_MEDIAPLAYBACK_6_4
TC_MOD_1_1
TC_MOD_3_1
TC_MOD_3_2
TC_MOD_3_3
TC_MOD_3_4
TC_NDOCONC_1_1
TC_NDOCONC_2_1
TC_OCC_2_3
TC_OCC_3_1
TC_OO_1_1
TC_OO_2_1
TC_OO_2_2
TC_OO_2_3
TC_OO_2_4
TC_OPCREDS_1_2
TC_OPCREDS_3_7
TC_OPSTATE_1_1
TC_OZCONC_1_1
TC_OZCONC_2_1
TC_PRS_1_1
TC_PRS_2_1
TC_PRS_2_2
TC_PSCFG_1_1
TC_PS_1_1
TC_PS_2_1
TC_PS_2_2
TC_REFALM_1_1
TC_REFALM_2_3
TC_RH_1_1
TC_RH_2_1
TC_RH_2_2
TC_RNCONC_1_1
TC_RNCONC_2_1
TC_RVCCLEANM_1_1
TC_RVCCLEANM_3_1
TC_RVCCLEANM_3_3
TC_RVCOPSTATE_1_1
TC_RVCRUNM_1_1
TC_RVCRUNM_3_3
TC_SC_5_1
TC_SMOKECO_2_2
TC_SMOKECO_2_3
TC_SMOKECO_2_4
TC_SMOKECO_2_5
TC_S_1_1
TC_S_2_1
TC_S_2_2
TC_S_2_3
TC_S_2_4
TC_TCCM_1_1
TC_TCCM_3_1
TC_TCCM_3_2
TC_TCCM_3_3
TC_TGTNAV_1_9
TC_TGTNAV_8_1
TC_TIMESYNC_1_1
TC_TMP_1_1
TC_TMP_2_1
TC_TMP_2_2
TC_TSTAT_1_1
TC_TSTAT_2_2
TC_TSUIC_1_1
TC_TSUIC_2_1
TC_TSUIC_2_2
TC_TVOCCONC_1_1
TC_TVOCCONC_2_1
TC_ULABEL_1_1
TC_ULABEL_2_1
TC_ULABEL_2_2
TC_ULABEL_2_3
TC_ULABEL_2_4
TC_WAKEONLAN_1_5
TC_WAKEONLAN_4_1
TC_WASHERCTRL_1_1
TC_WASHERCTRL_2_1
TC_WASHERCTRL_2_2
TC_WNCV_1_1
TC_WNCV_2_1
TC_WNCV_2_2
TC_WNCV_2_3
TC_WNCV_2_4
TC_WNCV_2_5
TC_WNCV_3_1
TC_WNCV_3_2
TC_WNCV_3_3
TC_WNCV_3_4
TC_WNCV_3_5
TC_WNCV_4_1
TC_WNCV_4_2
TC_WNCV_4_3
TC_WNCV_4_4
TC_WNCV_4_5
modified:  ci-pics-values

* Auto generated files

* modifed FAN-2.1 file

* Restyled by whitespace

* Restyled by prettier-yaml

* Modified files:
TC_CNET_1_3.yaml
TC_DISHM_3_2.yaml
TC_PCC_2_1.yaml
TC_PCC_2_2.yaml
TC_PCC_2_3.yaml
TC_PCC_2_4.yaml
TC_TCCM_2_1.yaml
TC_TSTAT_2_1.yaml

* Revert back the PICS and functionality changes.

---------

Co-authored-by: Restyled.io <commits@restyled.io>
  • Loading branch information
manjunath-grl and restyled-commits authored Jan 12, 2024
1 parent 6ff2f71 commit 40599c4
Show file tree
Hide file tree
Showing 185 changed files with 7,185 additions and 6,283 deletions.
186 changes: 137 additions & 49 deletions src/app/tests/suites/certification/Test_TC_ACE_1_1.yaml

Large diffs are not rendered by default.

53 changes: 40 additions & 13 deletions src/app/tests/suites/certification/Test_TC_ACE_1_5.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ config:
defaultValue: "hex:b96170aae803346884724fe9a3b287c30330c2a660375d17bb205a8cf1aecb350457f8ab79ee253ab6a8e46bb09e543ae422736de501e3db37d441fe344920d09548e4c18240630c4ff4913c53513839b7c07fcc0627a1b8573a149fcd1fa466cf"

tests:
- label: "Step 1: Wait for the commissioned device to be retrieved for TH1"
- label: "Step 1: TH1 commissions DUT using admin node ID N1"
cluster: "DelayCommands"
command: "WaitForCommissionee"
arguments:
Expand Down Expand Up @@ -81,7 +81,7 @@ tests:
- name: "expectedValue"
value: "y"

- label: "Step 2: Open Commissioning Window from alpha"
- label: "Step 2: TH1 opens the commissioning window on the DUT"
cluster: "Administrator Commissioning"
command: "OpenCommissioningWindow"
timedInteractionTimeoutMs: 10000
Expand All @@ -108,7 +108,7 @@ tests:
- name: "ms"
value: waitAfterCommissioning

- label: "Step 3: Commission from TH2"
- label: "Step 3: TH2 commissions DUT using admin node ID N2"
identity: "beta"
cluster: "CommissionerCommands"
command: "PairWithCode"
Expand All @@ -130,7 +130,9 @@ tests:
- name: "nodeId"
value: nodeId

- label: "Step 4: TH2 reads the fabric index"
- label:
"Step 4: TH2 reads its fabric index from the Operational Credentials
cluster CurrentFabricIndex attribute"
identity: "beta"
PICS: PICS_SDK_CI_ONLY
cluster: "Operational Credentials"
Expand Down Expand Up @@ -169,7 +171,14 @@ tests:
saveAs: commissionerNodeIdAlpha

- label:
"Step 5: TH1 writes ACL giving view privilege for descriptor cluster"
"Step 5: TH1 writes DUT Endpoint 0 AccessControl cluster ACL
attribute,value is list of AccessControlEntryStruct containing 2
elements 1.Struct : a)Fabric Index: 1 b)Privilege field: Administer
(5) c)AuthMode field: CASE (2) d)Subjects field: [N1] e)Targets
field:[{Cluster: AccessControl (0x001f), Endpoint: 0}] 2.struct :
a)Fabric Index: 1 b)Privilege field: View (1) c)AuthMode field: CASE
(2) d)Subjects field: null e)Targets field: [{Cluster: Descriptor
(0x001d), Endpoint: 0}]"
command: "writeAttribute"
attribute: "ACL"
arguments:
Expand Down Expand Up @@ -202,7 +211,12 @@ tests:
- name: "nodeId"
saveAs: commissionerNodeIdBeta

- label: "Step 6: TH2 writes ACL giving view privilge for basic cluster"
- label:
"Step 6: TH2 writes DUT Endpoint 0 AccessControl cluster ACL
attribute,value is list of AccessControlEntryStruct containing 2
elements 1.Struct : a)Fabric Index: th2FabricIndex b)Privilege field:
Administer (5) c)AuthMode field: CASE (2) d)Subjects field: [N2]
e)Targets field: [{Cluster: AccessControl (0x001f), Endpoint: 0}]"
identity: beta
PICS: PICS_SDK_CI_ONLY
command: "writeAttribute"
Expand Down Expand Up @@ -249,21 +263,25 @@ tests:
- name: "expectedValue"
value: "y"

- label: "Step 7: TH1 reads descriptor cluster - expect SUCCESS"
- label:
"Step 7: TH1 reads DUT Endpoint 0 Descriptor cluster DeviceTypeList
attribute"
command: "readAttribute"
cluster: "Descriptor"
attribute: "DeviceTypeList"

- label:
"Step 8: TH1 reads DUT Endpoint 0 Basic Information cluster VendorID
attribute - expect UNSUPPORTED_ACCESS"
attribute"
command: "readAttribute"
cluster: "Basic Information"
attribute: "VendorID"
response:
error: UNSUPPORTED_ACCESS

- label: "Step 9: TH2 reads descriptor cluster - expect UNSUPPORTED_ACCESS"
- label:
"Step 9: TH2 reads DUT Endpoint 0 Descriptor cluster DeviceTypeList
attribute"
identity: "beta"
PICS: PICS_SDK_CI_ONLY
command: "readAttribute"
Expand Down Expand Up @@ -295,7 +313,7 @@ tests:

- label:
"Step 10: TH2 reads DUT Endpoint 0 Basic Information cluster VendorID
attribute - expect SUCCESS"
attribute"
identity: "beta"
PICS: PICS_SDK_CI_ONLY
command: "readAttribute"
Expand Down Expand Up @@ -324,7 +342,12 @@ tests:
- name: "expectedValue"
value: "y"

- label: "Step 11: TH1 resets ACL to default"
- label:
"Step 11: TH1 resets the ACLs to the default value bywriting DUT
Endpoint 0 AccessControl cluster ACL attribute,value is list of
AccessControlEntryStruct containing 1 elements 1.Struct : a)Fabric
Index: 1 b)Privilege field: Administer (5) c)AuthMode field: CASE (2)
d)Subjects field: [N1] e)Targets field: null"
command: "writeAttribute"
attribute: "ACL"
arguments:
Expand All @@ -338,7 +361,9 @@ tests:
},
]

- label: "Step 12: TH1 sends RemoveFabric command for TH2"
- label:
"Step 12: TH1 removes the TH2 fabric by sending the RemoveFabric
command to the DUT with the FabricIndex set to th2FabricIndex"
cluster: "Operational Credentials"
PICS: PICS_SDK_CI_ONLY
command: "RemoveFabric"
Expand All @@ -348,7 +373,9 @@ tests:
value: th2FabricIndex

#Issue https://github.com/CHIP-Specifications/chip-certification-tool/issues/768
- label: "Step 12: TH1 sends RemoveFabric command for TH2"
- label:
"Step 12: TH1 removes the TH2 fabric by sending the RemoveFabric
commandto the DUT with the FabricIndex set to th2FabricIndex"
verification: |
./chip-tool operationalcredentials remove-fabric 2 1 0
Expand Down
26 changes: 14 additions & 12 deletions src/app/tests/suites/certification/Test_TC_ACFREMON_1_1.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -23,23 +23,25 @@ config:
endpoint: 1

tests:
- label: "Step 1: Wait for the commissioned device to be retrieved"
- label:
"Step 1: Commission DUT to TH (can be skipped if done in a preceding
test)."
cluster: "DelayCommands"
command: "WaitForCommissionee"
arguments:
values:
- name: "nodeId"
value: nodeId

- label: "Step 2: Read the global attribute: ClusterRevision"
- label: "Step 2: TH reads from the DUT the ClusterRevision attribute."
command: "readAttribute"
attribute: "ClusterRevision"
response:
value: 1
constraints:
type: int16u

- label: "Step 3a: Read the global attribute: FeatureMap"
- label: "Step 3a: TH reads from the DUT the FeatureMap attribute."
command: "readAttribute"
attribute: "FeatureMap"
PICS: "!ACFREMON.S.F00 && !ACFREMON.S.F01 && !ACFREMON.S.F02"
Expand Down Expand Up @@ -81,7 +83,7 @@ tests:
type: bitmap32
hasMasksSet: [0x4]

- label: "Step 4a: Read the global attribute: AttributeList"
- label: "Step 4a: TH reads from the DUT the AttributeList attribute."
PICS: PICS_EVENT_LIST_ENABLED
command: "readAttribute"
attribute: "AttributeList"
Expand All @@ -90,7 +92,7 @@ tests:
type: list
contains: [2, 65528, 65529, 65530, 65531, 65532, 65533]

- label: "Step 4a: Read the global attribute: AttributeList"
- label: "Step 4a: TH reads from the DUT the AttributeList attribute."
PICS: "!PICS_EVENT_LIST_ENABLED"
command: "readAttribute"
attribute: "AttributeList"
Expand All @@ -100,7 +102,7 @@ tests:
contains: [2, 65528, 65529, 65531, 65532, 65533]

- label:
"Step 4b: Read the feature dependent(ACFREMON.S.F00) attribute in
"Step 4b: TH reads the feature dependent(ACFREMON.S.F00) attribute in
AttributeList"
PICS: ACFREMON.S.F00
command: "readAttribute"
Expand All @@ -111,7 +113,7 @@ tests:
contains: [0, 1, 2]

- label:
"Step 4c: Read the optional attribute InPlaceIndicator
"Step 4c: TH reads the optional attribute InPlaceIndicator
(ACFREMON.S.A0003) in AttributeList"
PICS: ACFREMON.S.A0003
command: "readAttribute"
Expand All @@ -122,7 +124,7 @@ tests:
contains: [3]

- label:
"Step 4d: Read the optional attribute LastChangedTime
"Step 4d: TH reads the optional attribute LastChangedTime
(ACFREMON.S.A0004) in AttributeList"
PICS: ACFREMON.S.A0004
command: "readAttribute"
Expand All @@ -133,7 +135,7 @@ tests:
contains: [4]

- label:
"Step 4e: Read the optional attribute ReplacementProductList
"Step 4e: TH reads the optional attribute ReplacementProductList
(ACFREMON.S.F02) in AttributeList"
PICS: ACFREMON.S.F02
command: "readAttribute"
Expand All @@ -152,7 +154,7 @@ tests:
constraints:
type: list

- label: "Step 6: Read the global attribute: AcceptedCommandList"
- label: "Step 6a: TH reads from the DUT the AcceptedCommandList attribute."
PICS: "!ACFREMON.S.C00.Rsp"
command: "readAttribute"
attribute: "AcceptedCommandList"
Expand All @@ -162,7 +164,7 @@ tests:
type: list

- label:
"Step 6: Read the optional command (ResetCondition) in
"Step 6b: TH reads the optional command (ResetCondition) in
AcceptedCommandList"
PICS: ACFREMON.S.C00.Rsp
command: "readAttribute"
Expand All @@ -172,7 +174,7 @@ tests:
type: list
contains: [0]

- label: "Step 7: Read the global attribute: GeneratedCommandList"
- label: "Step 7: TH reads from the DUT the GeneratedCommandList attribute."
command: "readAttribute"
attribute: "GeneratedCommandList"
response:
Expand Down
20 changes: 16 additions & 4 deletions src/app/tests/suites/certification/Test_TC_ACL_2_10.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ config:
defaultValue: "hex:17D00000F1FF01003D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E74206C6976696E6720617320612063686172737472696E670018"

tests:
- label: "Step 1:Wait for the commissioned device to be retrieved"
- label: "Step 1:TH1 commissions DUT using admin node ID N1"
cluster: "DelayCommands"
command: "WaitForCommissionee"
arguments:
Expand All @@ -70,7 +70,9 @@ tests:
response:
saveAs: TH1FabricIndex

- label: "Step 3:TH1 puts DUT into commissioning mode"
- label:
"Step 3:TH1 puts DUT into commissioning mode, TH2 commissions DUT
using admin node ID N2"
PICS: PICS_SDK_CI_ONLY && CADMIN.S.C00.Rsp
cluster: "Administrator Commissioning"
command: "OpenCommissioningWindow"
Expand Down Expand Up @@ -193,7 +195,12 @@ tests:
value: "y"

- label:
"Step 5:TH1 writes DUT Endpoint 0 AccessControl cluster ACL attribute"
"Step 5:TH1 writes DUT Endpoint 0 AccessControl cluster ACL attribute,
value is list of AccessControlEntryStruct containing 2 elements
1.struct : a)Privilege field: Administer (5) b)AuthMode field: CASE
(2) c)Subjects field: [N1, 1111] d)Targets field: null 2.Struct :
a)Privilege field: Operate (3) b)AuthMode field: Group (3) c)Subjects
field: [3333] d)Targets field: null"
PICS: ACL.S.A0000
command: "writeAttribute"
attribute: "ACL"
Expand All @@ -217,7 +224,12 @@ tests:
]

- label:
"Step 6:TH2 writes DUT Endpoint 0 AccessControl cluster ACL attribute"
"Step 6:TH2 writes DUT Endpoint 0 AccessControl cluster ACL attribute
value is list of AccessControlEntryStruct containing 2 elements
1.Struct : a)Privilege field: Administer (5) b)AuthMode field: CASE
(2) c)Subjects field: [N2, 2222] d)Targets field: null 2.Struct :
a)Privilege field: Operate (3) b)AuthMode field: Group (3) c)Subjects
field: [4444] d)Targets field: null"
PICS: ACL.S.A0000 && PICS_SDK_CI_ONLY
identity: "beta"
command: "writeAttribute"
Expand Down
12 changes: 9 additions & 3 deletions src/app/tests/suites/certification/Test_TC_ACL_2_9.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,10 @@ tests:
saveAs: CurrentFabricIndexValue

- label:
"Step 2:TH1 writes DUT Endpoint 0 AccessControl cluster ACL attribute"
"Step 2:TH1 writes DUT Endpoint 0 AccessControl cluster ACL attribute,
value is list of AccessControlEntryStruct containing 1 element
1.Struct : a)Privilege field: Manage (4) b)AuthMode field: CASE (2)
c)Subjects field: [N1] d)Targets field: null"
PICS: ACL.S.A0000
command: "writeAttribute"
attribute: "ACL"
Expand All @@ -80,7 +83,10 @@ tests:
error: UNSUPPORTED_ACCESS

- label:
"Step 4:TH1 writes DUT Endpoint 0 AccessControl cluster ACL attribute"
"Step 4:TH1 writes DUT Endpoint 0 AccessControl cluster ACL attribute,
value is list of AccessControlEntryStruct containing 1 element
1.Struct : a)Privilege field: Administer (5) b)AuthMode field: CASE
(2) c)Subjects field: [N1] d)argets field: null"
PICS: ACL.S.A0000
command: "writeAttribute"
attribute: "ACL"
Expand Down Expand Up @@ -109,7 +115,7 @@ tests:

- label:
"Step 6:TH1 writes DUT Endpoint 0 AccessControl cluster Extension
attribute"
attribute, value is an empty list"
PICS: ACL.S.A0001
command: "writeAttribute"
attribute: "Extension"
Expand Down
14 changes: 7 additions & 7 deletions src/app/tests/suites/certification/Test_TC_AIRQUAL_1_1.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -31,15 +31,15 @@ tests:
- name: "nodeId"
value: nodeId

- label: "Step 2: Read the global attribute: ClusterRevision"
- label: "Step 2: TH reads from the DUT the ClusterRevision attribute."
command: "readAttribute"
attribute: "ClusterRevision"
response:
value: 1
constraints:
type: int16u

- label: "Step 3a: Read the global attribute: FeatureMap"
- label: "Step 3a: TH reads from the DUT the FeatureMap attribute."
command: "readAttribute"
attribute: "FeatureMap"
PICS:
Expand Down Expand Up @@ -93,7 +93,7 @@ tests:
type: bitmap32
hasMasksSet: [0x8]

- label: "Step 4: Read the global attribute: AttributeList"
- label: "Step 4: TH reads from the DUT the AttributeList attribute."
PICS: PICS_EVENT_LIST_ENABLED
command: "readAttribute"
attribute: "AttributeList"
Expand All @@ -102,7 +102,7 @@ tests:
type: list
contains: [0, 65528, 65529, 65530, 65531, 65532, 65533]

- label: "Step 4: Read the global attribute: AttributeList"
- label: "Step 4: TH reads from the DUT the AttributeList attribute."
PICS: "!PICS_EVENT_LIST_ENABLED"
command: "readAttribute"
attribute: "AttributeList"
Expand All @@ -111,7 +111,7 @@ tests:
type: list
contains: [0, 65528, 65529, 65531, 65532, 65533]

- label: "Step 5: TH reads EventList attribute from DUT"
- label: "Step 5: TH reads from the DUT the EventList attribute."
PICS: PICS_EVENT_LIST_ENABLED
command: "readAttribute"
attribute: "EventList"
Expand All @@ -120,15 +120,15 @@ tests:
constraints:
type: list

- label: "Step 6: Read the global attribute: AcceptedCommandList"
- label: "Step 6: TH reads from the DUT the AcceptedCommandList attribute."
command: "readAttribute"
attribute: "AcceptedCommandList"
response:
constraints:
type: list
contains: []

- label: "Step 7: Read the global attribute: GeneratedCommandList"
- label: "Step 7: TH reads from the DUT the GeneratedCommandList attribute."
command: "readAttribute"
attribute: "GeneratedCommandList"
response:
Expand Down
Loading

0 comments on commit 40599c4

Please sign in to comment.