public override void OnGUI(UnityEngine.Rect position, UnityEditor.SerializedProperty property, UnityEngine.GUIContent label) {

            var data = property.FindPropertyRelative("data");
            var vars = property.FindPropertyRelative("boxVars");
            var captions = property.FindPropertyRelative("captions");
            var isInput = property.FindPropertyRelative("isInput").boolValue;
            for (int i = 0; i < data.arraySize; ++i) {

                var element = data.GetArrayElementAtIndex(i);
                var isArray = element.FindPropertyRelative("isArray");
                var key = (isArray.boolValue == true ? "valueArr" : "value");
                
                var value = element.FindPropertyRelative(key);
                if (isInput == false) UnityEditor.EditorGUI.PropertyField(position, value, new UnityEngine.GUIContent(GUILayoutExt.GetStringCamelCaseSpace(captions.GetArrayElementAtIndex(i).stringValue)), true);
                var h = UnityEditor.EditorGUI.GetPropertyHeight(value, true);
                position.height = UnityEditor.EditorGUI.GetPropertyHeight(value, false);
                this.DrawLink(ref position, i, vars.GetArrayElementAtIndex(i), value, isInput);
                position.y += h;

            }
            
        }