Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions ba/doc/conformance.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,9 @@ The user directed that the report findings be treated as valid and filed without
| G14 | [#3178](https://github.com/osate/osate2/issues/3178) | V11 | [#3192](https://github.com/osate/osate2/issues/3192) |
| G18 | [#3199](https://github.com/osate/osate2/issues/3199) | | |

Closed since the review: G01 ([#3165](https://github.com/osate/osate2/issues/3165), internal conditions), G03 ([#3167](https://github.com/osate/osate2/issues/3167), frozen-port parentheses), G04 ([#3168](https://github.com/osate/osate2/issues/3168), timeout reset ports), G08 ([#3172](https://github.com/osate/osate2/issues/3172), `self` property references), G10 ([#3174](https://github.com/osate/osate2/issues/3174), internal port actions), G11 ([#3175](https://github.com/osate/osate2/issues/3175), numeric literals), G16 ([#3180](https://github.com/osate/osate2/issues/3180), loop-variable assignment targets), V01 ([#3182](https://github.com/osate/osate2/issues/3182), declaration naming rules), and V02 ([#3183](https://github.com/osate/osate2/issues/3183), otherwise-transition rules). G12 ([#3176](https://github.com/osate/osate2/issues/3176), array extents) is addressed on a branch whose pull request is still open, so it is the one row below whose fix is not yet on `master`.
Closed since the review: G01 ([#3165](https://github.com/osate/osate2/issues/3165), internal conditions), G03 ([#3167](https://github.com/osate/osate2/issues/3167), frozen-port parentheses), G04 ([#3168](https://github.com/osate/osate2/issues/3168), timeout reset ports), G08 ([#3172](https://github.com/osate/osate2/issues/3172), `self` property references), G10 ([#3174](https://github.com/osate/osate2/issues/3174), internal port actions), G11 ([#3175](https://github.com/osate/osate2/issues/3175), numeric literals), G16 ([#3180](https://github.com/osate/osate2/issues/3180), loop-variable assignment targets), V01 ([#3182](https://github.com/osate/osate2/issues/3182), declaration naming rules), and V02 ([#3183](https://github.com/osate/osate2/issues/3183), otherwise-transition rules). G12 ([#3176](https://github.com/osate/osate2/issues/3176), array extents) and its follow-ups [#3208](https://github.com/osate/osate2/issues/3208) and [#3210](https://github.com/osate/osate2/issues/3210) are addressed on branches not yet merged into `master`.

That work opened four defects the review itself did not name. [#3195](https://github.com/osate/osate2/issues/3195), a bare `on dispatch` losing its condition unless exactly one space separated the keywords, is closed. Three are open: [#3205](https://github.com/osate/osate2/issues/3205), the dequeue form of the G16 rule, which the assignment check did not reach; and [#3208](https://github.com/osate/osate2/issues/3208) and [#3210](https://github.com/osate/osate2/issues/3210), both from G12 and both described in that row. Each row's assessment below still describes the state at the review date unless it says otherwise.
That work opened four defects the review itself did not name: [#3195](https://github.com/osate/osate2/issues/3195), a bare `on dispatch` losing its condition unless exactly one space separated the keywords; [#3205](https://github.com/osate/osate2/issues/3205), the dequeue form of the G16 rule, which the assignment check did not reach; and [#3208](https://github.com/osate/osate2/issues/3208) and [#3210](https://github.com/osate/osate2/issues/3210), both from G12 and both described in that row. Each row's assessment below still describes the state at the review date unless it says otherwise.

## Reference and review method

Expand Down Expand Up @@ -109,7 +109,7 @@ Consequently, source inspection establishes that a real such as `1.25` becomes z

**Impact:** Rank is retained but extent is lost. A declaration of a ten-element behavior variable is not represented as a ten-element strict variable. Add direct extent and referenced-size assertions; tree-shape goldens cannot catch this.

**Addressed by [#3176](https://github.com/osate/osate2/issues/3176), whose pull request is still open:** `translateVariables` now translates each declared size, so a literal extent becomes the `ArraySize` extent through the same core AADL literal reader the other literals use, and a reference to a property constant becomes the dimension's size property, which is how core AADL represents that size and what `AadlUtil.getElementCount` resolves. Each dimension and each size also traces to the syntax that supplied it rather than to the dimension. `Issue3176Test` asserts extents, the resolved element count, and both traces; the resolved-model goldens record containment only and cannot see an extent. What remains, both confirmed by external models that are accepted with zero diagnostics and translate to a zero extent: `aadl2::ArraySize` carries a literal or a property constant only, so a size written as any other property reference loses its extent even where the element carrying the value is named, which is a representation gap tracked as [#3210](https://github.com/osate/osate2/issues/3210); and the relaxed grammar also accepts a size that names a variable, which D.3 does not admit for an integer value constant, so that is a missing legality check tracked as [#3208](https://github.com/osate/osate2/issues/3208). The two share one grammar node: a `ReferenceExpression` with a property tail is the admissible property reference, without one it is the inadmissible variable.
**Addressed by [#3176](https://github.com/osate/osate2/issues/3176), [#3208](https://github.com/osate/osate2/issues/3208), and [#3210](https://github.com/osate/osate2/issues/3210):** `translateVariables` now translates each declared size, so a literal extent becomes the `ArraySize` extent through the same core AADL literal reader the other literals use, and a reference to a property constant becomes the dimension's size property, which is how core AADL represents that size and what `AadlUtil.getElementCount` resolves. Each dimension and each size also traces to the syntax that supplied it rather than to the dimension. `Issue3176Test` asserts extents, the resolved element count, and both traces; the resolved-model goldens record containment only and cannot see an extent. Validation rejects an ordinary reference expression such as a behavior variable, which D.3 does not admit for an integer value constant. An element-prefixed property reference with one non-modal integer value is evaluated into the strict extent; a property reference without an unambiguous value, including a bare property definition with no value owner, is reported on the size and kept out of the strict-model checkers rather than becoming a zero extent. `Issue3208Test` and `Issue3210Test` assert the rejected forms alongside accepted literal, property-constant, and unambiguous prefixed-property controls.

### G13 β€” Expression precedence, admissible forms, and grouping are inconsistent

Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 2 additions & 0 deletions ba/org.osate.ba.edit/plugin.properties
Original file line number Diff line number Diff line change
Expand Up @@ -359,3 +359,5 @@ _UI_InternalCondition_type = Internal Condition
_UI_InternalCondition_internalPorts_feature = Internal Ports
_UI_TimeoutResetPort_type = Timeout Reset Port
_UI_CompletionRelativeTimeout_resetPorts_feature = Reset Ports
_UI_BehaviorArraySize_type = Behavior Array Size
_UI_BehaviorArraySize_integerValue_feature = Integer Value
Original file line number Diff line number Diff line change
Expand Up @@ -248,6 +248,29 @@ public Adapter createBehaviorAnnexAdapter() {
return behaviorAnnexItemProvider;
}

/**
* This keeps track of the one adapter used for all {@link org.osate.ba.aadlba.BehaviorArraySize} instances.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
protected BehaviorArraySizeItemProvider behaviorArraySizeItemProvider;

/**
* This creates an adapter for a {@link org.osate.ba.aadlba.BehaviorArraySize}.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public Adapter createBehaviorArraySizeAdapter() {
if (behaviorArraySizeItemProvider == null) {
behaviorArraySizeItemProvider = new BehaviorArraySizeItemProvider(this);
}

return behaviorArraySizeItemProvider;
}

/**
* This keeps track of the one adapter used for all {@link org.osate.ba.aadlba.BehaviorBooleanLiteral} instances.
* <!-- begin-user-doc -->
Expand Down Expand Up @@ -2191,6 +2214,9 @@ public void dispose() {
if (behaviorAnnexItemProvider != null) {
behaviorAnnexItemProvider.dispose();
}
if (behaviorArraySizeItemProvider != null) {
behaviorArraySizeItemProvider.dispose();
}
if (behaviorBooleanLiteralItemProvider != null) {
behaviorBooleanLiteralItemProvider.dispose();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,238 @@
/**
* AADL-BA-FrontEnd
*
* Copyright (c) 2011-2021 TELECOM ParisTech and CNRS
*
* TELECOM ParisTech/LTCI
*
* Authors: see AUTHORS
*
* This program is free software: you can redistribute it and/or modify it under
* the terms of the Eclipse Public License as published by Eclipse, either
* version 2.0 of the License, or (at your option) any later version. This
* program is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the Eclipse Public License for
* more details. You should have received a copy of the Eclipse Public License
* along with this program. If not, see
* https://www.eclipse.org/legal/epl-2.0/
*/
package org.osate.ba.aadlba.provider;

import java.util.Collection;
import java.util.List;

import org.eclipse.emf.common.notify.AdapterFactory;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.util.ResourceLocator;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
import org.eclipse.emf.edit.provider.ViewerNotification;
import org.osate.aadl2.provider.ArraySizeItemProvider;
import org.osate.ba.aadlba.AadlBaFactory;
import org.osate.ba.aadlba.AadlBaPackage;
import org.osate.ba.aadlba.BehaviorArraySize;

/**
* This is the item provider adapter for a {@link org.osate.ba.aadlba.BehaviorArraySize} object.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public class BehaviorArraySizeItemProvider extends ArraySizeItemProvider {
/**
* This constructs an instance from a factory and a notifier.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public BehaviorArraySizeItemProvider(AdapterFactory adapterFactory) {
super(adapterFactory);
}

/**
* This returns the property descriptors for the adapted class.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
if (itemPropertyDescriptors == null) {
super.getPropertyDescriptors(object);

}
return itemPropertyDescriptors;
}

/**
* This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
* {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
* {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
if (childrenFeatures == null) {
super.getChildrenFeatures(object);
childrenFeatures.add(AadlBaPackage.Literals.BEHAVIOR_ARRAY_SIZE__INTEGER_VALUE);
}
return childrenFeatures;
}

/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
protected EStructuralFeature getChildFeature(Object object, Object child) {
// Check the type of the specified child object and return the proper feature to use for
// adding (see {@link AddCommand}) it as a child.

return super.getChildFeature(object, child);
}

/**
* This returns BehaviorArraySize.gif.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public Object getImage(Object object) {
return overlayImage(object, getResourceLocator().getImage("full/obj16/BehaviorArraySize"));
}

/**
* This returns the label text for the adapted class.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public String getText(Object object) {
BehaviorArraySize behaviorArraySize = (BehaviorArraySize) object;
return getString("_UI_BehaviorArraySize_type") + " " + behaviorArraySize.getSize();
}

/**
* This handles model notifications by calling {@link #updateChildren} to update any cached
* children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public void notifyChanged(Notification notification) {
updateChildren(notification);

switch (notification.getFeatureID(BehaviorArraySize.class)) {
case AadlBaPackage.BEHAVIOR_ARRAY_SIZE__INTEGER_VALUE:
fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
return;
}
super.notifyChanged(notification);
}

/**
* This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
* that can be created under this object.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
super.collectNewChildDescriptors(newChildDescriptors, object);

newChildDescriptors.add(createChildParameter(AadlBaPackage.Literals.BEHAVIOR_ARRAY_SIZE__INTEGER_VALUE,
AadlBaFactory.eINSTANCE.createBehaviorBooleanLiteral()));

newChildDescriptors.add(createChildParameter(AadlBaPackage.Literals.BEHAVIOR_ARRAY_SIZE__INTEGER_VALUE,
AadlBaFactory.eINSTANCE.createBehaviorIntegerLiteral()));

newChildDescriptors.add(createChildParameter(AadlBaPackage.Literals.BEHAVIOR_ARRAY_SIZE__INTEGER_VALUE,
AadlBaFactory.eINSTANCE.createBehaviorPropertyConstant()));

newChildDescriptors.add(createChildParameter(AadlBaPackage.Literals.BEHAVIOR_ARRAY_SIZE__INTEGER_VALUE,
AadlBaFactory.eINSTANCE.createBehaviorRealLiteral()));

newChildDescriptors.add(createChildParameter(AadlBaPackage.Literals.BEHAVIOR_ARRAY_SIZE__INTEGER_VALUE,
AadlBaFactory.eINSTANCE.createBehaviorStringLiteral()));

newChildDescriptors.add(createChildParameter(AadlBaPackage.Literals.BEHAVIOR_ARRAY_SIZE__INTEGER_VALUE,
AadlBaFactory.eINSTANCE.createBehaviorVariableHolder()));

newChildDescriptors.add(createChildParameter(AadlBaPackage.Literals.BEHAVIOR_ARRAY_SIZE__INTEGER_VALUE,
AadlBaFactory.eINSTANCE.createClassifierFeaturePropertyReference()));

newChildDescriptors.add(createChildParameter(AadlBaPackage.Literals.BEHAVIOR_ARRAY_SIZE__INTEGER_VALUE,
AadlBaFactory.eINSTANCE.createClassifierPropertyReference()));

newChildDescriptors.add(createChildParameter(AadlBaPackage.Literals.BEHAVIOR_ARRAY_SIZE__INTEGER_VALUE,
AadlBaFactory.eINSTANCE.createDataAccessHolder()));

newChildDescriptors.add(createChildParameter(AadlBaPackage.Literals.BEHAVIOR_ARRAY_SIZE__INTEGER_VALUE,
AadlBaFactory.eINSTANCE.createDataAccessPrototypeHolder()));

newChildDescriptors.add(createChildParameter(AadlBaPackage.Literals.BEHAVIOR_ARRAY_SIZE__INTEGER_VALUE,
AadlBaFactory.eINSTANCE.createDataComponentReference()));

newChildDescriptors.add(createChildParameter(AadlBaPackage.Literals.BEHAVIOR_ARRAY_SIZE__INTEGER_VALUE,
AadlBaFactory.eINSTANCE.createDataPortHolder()));

newChildDescriptors.add(createChildParameter(AadlBaPackage.Literals.BEHAVIOR_ARRAY_SIZE__INTEGER_VALUE,
AadlBaFactory.eINSTANCE.createDataSubcomponentHolder()));

newChildDescriptors.add(createChildParameter(AadlBaPackage.Literals.BEHAVIOR_ARRAY_SIZE__INTEGER_VALUE,
AadlBaFactory.eINSTANCE.createEventDataPortHolder()));

newChildDescriptors.add(createChildParameter(AadlBaPackage.Literals.BEHAVIOR_ARRAY_SIZE__INTEGER_VALUE,
AadlBaFactory.eINSTANCE.createEventPortHolder()));

newChildDescriptors.add(createChildParameter(AadlBaPackage.Literals.BEHAVIOR_ARRAY_SIZE__INTEGER_VALUE,
AadlBaFactory.eINSTANCE.createFeaturePrototypeHolder()));

newChildDescriptors.add(createChildParameter(AadlBaPackage.Literals.BEHAVIOR_ARRAY_SIZE__INTEGER_VALUE,
AadlBaFactory.eINSTANCE.createIterativeVariableHolder()));

newChildDescriptors.add(createChildParameter(AadlBaPackage.Literals.BEHAVIOR_ARRAY_SIZE__INTEGER_VALUE,
AadlBaFactory.eINSTANCE.createParameterHolder()));

newChildDescriptors.add(createChildParameter(AadlBaPackage.Literals.BEHAVIOR_ARRAY_SIZE__INTEGER_VALUE,
AadlBaFactory.eINSTANCE.createPortCountValue()));

newChildDescriptors.add(createChildParameter(AadlBaPackage.Literals.BEHAVIOR_ARRAY_SIZE__INTEGER_VALUE,
AadlBaFactory.eINSTANCE.createPortDequeueValue()));

newChildDescriptors.add(createChildParameter(AadlBaPackage.Literals.BEHAVIOR_ARRAY_SIZE__INTEGER_VALUE,
AadlBaFactory.eINSTANCE.createPortFreezeAction()));

newChildDescriptors.add(createChildParameter(AadlBaPackage.Literals.BEHAVIOR_ARRAY_SIZE__INTEGER_VALUE,
AadlBaFactory.eINSTANCE.createPortFreshValue()));

newChildDescriptors.add(createChildParameter(AadlBaPackage.Literals.BEHAVIOR_ARRAY_SIZE__INTEGER_VALUE,
AadlBaFactory.eINSTANCE.createPortPrototypeHolder()));

newChildDescriptors.add(createChildParameter(AadlBaPackage.Literals.BEHAVIOR_ARRAY_SIZE__INTEGER_VALUE,
AadlBaFactory.eINSTANCE.createPropertySetPropertyReference()));

newChildDescriptors.add(createChildParameter(AadlBaPackage.Literals.BEHAVIOR_ARRAY_SIZE__INTEGER_VALUE,
AadlBaFactory.eINSTANCE.createStructUnionElementHolder()));
}

/**
* Return the resource locator for this item provider's resources.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public ResourceLocator getResourceLocator() {
return AadlbaEditPlugin.INSTANCE;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
error | semantic | 40 | 16 | 5 | Array size 'slots' must be an integer literal or a property reference
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
annex[0] owner=Issue3208::sizer.impl
(ArrayDimension, <null>, 2022, 3)
(ArrayDimension, <null>, 2063, 32)
(ArrayDimension, <null>, 2133, 7)
(BehaviorAnnex, behavior_specification, 1966, 365)
(BehaviorCondition, <null>, 2303, 19)
(BehaviorIntegerLiteral, <null>, 2023, 1)
(BehaviorState, done, 2233, 4)
(BehaviorState, ready, 2205, 5)
(BehaviorState, start, 2178, 5)
(BehaviorStateGroup, <null>, 2178, 22)
(BehaviorStateGroup, <null>, 2205, 23)
(BehaviorStateGroup, <null>, 2233, 19)
(BehaviorTransition, <null>, 2272, 18)
(BehaviorTransition, <null>, 2295, 36)
(BehaviorVariable, byConstant, 2053, 42)
(BehaviorVariable, byLiteral, 2013, 12)
(BehaviorVariable, byVariable, 2123, 17)
(BehaviorVariable, slots, 1980, 5)
(BehaviorVariableGroup, <null>, 1980, 28)
(BehaviorVariableGroup, <null>, 2013, 35)
(BehaviorVariableGroup, <null>, 2053, 65)
(BehaviorVariableGroup, <null>, 2123, 40)
(DispatchCondition, <null>, 2306, 16)
(DispatchConjunction, <null>, 2315, 7)
(DispatchTriggerCondition, <null>, 2315, 7)
(DispatchTriggerLogicalExpression, <null>, 2315, 7)
(HashPropertyReference, <null>, 2064, 30)
(Reference, <null>, 2134, 5)
(Reference, <null>, 2315, 7)
(ReferenceExpression, <null>, 2134, 5)
(ReferenceSegment, slots, 2134, 5)
(ReferenceSegment, trigger, 2315, 7)
Loading
Loading