diff --git a/Assets/VRM10/Editor/Components/VRM10MetaEditor.cs b/Assets/VRM10/Editor/Components/VRM10MetaEditor.cs
index 300f114fb..67d442e0e 100644
--- a/Assets/VRM10/Editor/Components/VRM10MetaEditor.cs
+++ b/Assets/VRM10/Editor/Components/VRM10MetaEditor.cs
@@ -5,78 +5,30 @@ using UnityEngine;
namespace UniVRM10
{
+ ///
+ /// Editor for VRM10ObjectMeta
+ ///
public class VRM10MetaEditor : SerializedPropertyEditor
{
- class ValidateProperty
- {
- public SerializedProperty m_prop;
-
- public delegate (string, MessageType) Validator(SerializedProperty prop);
- Validator m_validator;
-
- public ValidateProperty(SerializedProperty prop, Validator validator)
- {
- m_prop = prop;
- m_validator = validator;
- }
-
- public void OnGUI()
- {
- // var old = m_prop.stringValue;
- if (m_prop.propertyType == SerializedPropertyType.Generic)
- {
- if (m_prop.arrayElementType != null)
- {
- EditorGUILayout.LabelField(m_prop.name);
-
- var depth = m_prop.depth;
- var iterator = m_prop.Copy();
- for (var enterChildren = true; iterator.NextVisible(enterChildren); enterChildren = false)
- {
- if (iterator.depth < depth)
- break;
-
- depth = iterator.depth;
-
- // using (new EditorGUI.DisabledScope("m_Script" == iterator.propertyPath))
- EditorGUILayout.PropertyField(iterator, true);
- }
- }
- else
- {
- throw new System.NotImplementedException();
- }
- }
- else
- {
- EditorGUILayout.PropertyField(m_prop);
- }
- var (msg, msgType) = m_validator(m_prop);
- if (!string.IsNullOrEmpty(msg))
- {
- EditorGUILayout.HelpBox(msg, msgType);
- }
- // return old != m_prop.stringValue;
- }
- }
-
- SerializedProperty m_exporterVersion;
SerializedProperty m_thumbnail;
- ValidateProperty m_title;
- ValidateProperty m_version;
- ValidateProperty m_author;
- ValidateProperty m_contact;
- ValidateProperty m_reference;
+ VRM10MetaProperty m_name;
+ VRM10MetaProperty m_version;
+ VRM10MetaProperty m_copyright;
+ VRM10MetaProperty m_authors;
+ VRM10MetaProperty m_references;
+ VRM10MetaProperty m_contact;
+ VRM10MetaProperty m_thirdPartyLicenses;
+ VRM10MetaProperty m_OtherLicenseUrl;
- SerializedProperty m_AllowedUser;
+ SerializedProperty m_AvatarPermission;
SerializedProperty m_ViolentUssage;
SerializedProperty m_SexualUssage;
SerializedProperty m_CommercialUssage;
SerializedProperty m_PoliticalOrReligiousUsage;
- SerializedProperty m_OtherPermissionUrl;
-
- SerializedProperty m_LicenseType;
- SerializedProperty m_OtherLicenseUrl;
+ SerializedProperty m_AntisocialOrHateUsage;
+ SerializedProperty m_CreditNotation;
+ SerializedProperty m_Redistribution;
+ SerializedProperty m_Modification;
static string RequiredMessage(string name)
{
@@ -103,22 +55,46 @@ namespace UniVRM10
[LangMsg(Languages.en, "A person who can perform with this avatar")]
ALLOWED_USER,
- [LangMsg(Languages.ja, "このアバターを用いて暴力表現を演じることの許可")]
+ [LangMsg(Languages.ja, "このアバターを用いて暴力表現を演じること")]
[LangMsg(Languages.en, "Violent acts using this avatar")]
VIOLENT_USAGE,
- [LangMsg(Languages.ja, "このアバターを用いて性的表現を演じることの許可")]
+ [LangMsg(Languages.ja, "このアバターを用いて性的表現を演じること")]
[LangMsg(Languages.en, "Sexuality acts using this avatar")]
SEXUAL_USAGE,
- [LangMsg(Languages.ja, "商用利用の許可")]
+ [LangMsg(Languages.ja, "商用利用")]
[LangMsg(Languages.en, "For commercial use")]
COMMERCIAL_USAGE,
+ [LangMsg(Languages.ja, "政治・宗教用途での利用")]
+ [LangMsg(Languages.en, "Permits to use this model in political or religious contents")]
+ POLITICAL_USAGE,
+
+ [LangMsg(Languages.ja, "反社会的・憎悪表現を含むコンテンツでの利用")]
+ [LangMsg(Languages.en, "Permits to use this model in contents contain anti-social activities or hate speeches")]
+ ANTI_USAGE,
+
[LangMsg(Languages.ja, "再配布・改変に関する許諾範囲")]
[LangMsg(Languages.en, "Redistribution / Modifications License")]
REDISTRIBUTION_MODIFICATIONS,
+ [LangMsg(Languages.ja, "クレジット表記")]
+ [LangMsg(Languages.en, "Forces or abandons to display the credit")]
+ MOD_CREDIT,
+
+ [LangMsg(Languages.ja, "再配布")]
+ [LangMsg(Languages.en, "Permits redistribution")]
+ MOD_REDISTRIBUTION,
+
+ [LangMsg(Languages.ja, "改変")]
+ [LangMsg(Languages.en, "Controls the condition to modify")]
+ MOD_MODIFICATION,
+
+ [LangMsg(Languages.ja, "その他のライセンス条件があれば、そのURL")]
+ [LangMsg(Languages.en, "The URL links of other license")]
+ MOD_OTHER,
+
// [LangMsg(Languages.ja, "")]
// [LangMsg(Languages.en, "")]
}
@@ -165,12 +141,14 @@ namespace UniVRM10
return result;
}
+ VRM10MetaProperty CreateValidation(string name, VRM10MetaPropertyValidator validator = null)
+ {
+ return new VRM10MetaProperty(m_rootProperty.FindPropertyRelative(name), validator);
+ }
+
public VRM10MetaEditor(SerializedObject serializedObject, SerializedProperty property) : base(serializedObject, property)
{
- m_exporterVersion = m_rootProperty.FindPropertyRelative(nameof(VRM10ObjectMeta.ExporterVersion));
- m_thumbnail = m_rootProperty.FindPropertyRelative(nameof(VRM10ObjectMeta.Thumbnail));
-
- m_title = new ValidateProperty(m_rootProperty.FindPropertyRelative(nameof(VRM10ObjectMeta.Name)), prop =>
+ m_name = CreateValidation(nameof(VRM10ObjectMeta.Name), prop =>
{
if (string.IsNullOrEmpty(prop.stringValue))
{
@@ -178,15 +156,8 @@ namespace UniVRM10
}
return ("", MessageType.None);
});
- m_version = new ValidateProperty(m_rootProperty.FindPropertyRelative(nameof(VRM10ObjectMeta.Version)), prop =>
- {
- // if (string.IsNullOrEmpty(prop.stringValue))
- // {
- // return (RequiredMessage(prop.name), MessageType.Error);
- // }
- return ("", MessageType.None);
- });
- m_author = new ValidateProperty(m_rootProperty.FindPropertyRelative(nameof(VRM10ObjectMeta.Authors)), prop =>
+ m_version = CreateValidation(nameof(VRM10ObjectMeta.Version));
+ m_authors = CreateValidation(nameof(VRM10ObjectMeta.Authors), prop =>
{
if (prop.arraySize == 0)
{
@@ -194,25 +165,24 @@ namespace UniVRM10
}
return ("", MessageType.None);
});
- m_contact = new ValidateProperty(m_rootProperty.FindPropertyRelative(nameof(VRM10ObjectMeta.ContactInformation)), prop =>
- {
- return ("", MessageType.None);
- });
- m_reference = new ValidateProperty(m_rootProperty.FindPropertyRelative(nameof(VRM10ObjectMeta.References)), prop =>
- {
- return ("", MessageType.None);
- });
-
- m_AllowedUser = m_rootProperty.FindPropertyRelative(nameof(VRM10ObjectMeta.AllowedUser));
+ m_copyright = CreateValidation(nameof(VRM10ObjectMeta.CopyrightInformation));
+ m_contact = CreateValidation(nameof(VRM10ObjectMeta.ContactInformation));
+ m_references = CreateValidation(nameof(VRM10ObjectMeta.References));
+ m_thirdPartyLicenses = CreateValidation(nameof(VRM10ObjectMeta.ThirdPartyLicenses));
+ m_OtherLicenseUrl = CreateValidation(nameof(VRM10ObjectMeta.OtherLicenseUrl));
+ m_thumbnail = m_rootProperty.FindPropertyRelative(nameof(VRM10ObjectMeta.Thumbnail));
+ // AvatarPermission
+ m_AvatarPermission = m_rootProperty.FindPropertyRelative(nameof(VRM10ObjectMeta.AvatarPermission));
m_ViolentUssage = m_rootProperty.FindPropertyRelative(nameof(VRM10ObjectMeta.ViolentUsage));
m_SexualUssage = m_rootProperty.FindPropertyRelative(nameof(VRM10ObjectMeta.SexualUsage));
m_CommercialUssage = m_rootProperty.FindPropertyRelative(nameof(VRM10ObjectMeta.CommercialUsage));
m_PoliticalOrReligiousUsage = m_rootProperty.FindPropertyRelative(nameof(VRM10ObjectMeta.PoliticalOrReligiousUsage));
- m_OtherPermissionUrl = m_rootProperty.FindPropertyRelative(nameof(VRM10ObjectMeta.OtherLicenseUrl));
+ m_AntisocialOrHateUsage = m_rootProperty.FindPropertyRelative(nameof(VRM10ObjectMeta.AntisocialOrHateUsage));
+ // Mod
+ m_CreditNotation = m_rootProperty.FindPropertyRelative(nameof(VRM10ObjectMeta.CreditNotation));
+ m_Redistribution = m_rootProperty.FindPropertyRelative(nameof(VRM10ObjectMeta.Redistribution));
+ m_Modification = m_rootProperty.FindPropertyRelative(nameof(VRM10ObjectMeta.Modification));
- // m_LicenseType = m_rootProperty.FindPropertyRelative(nameof(VRM10ObjectMeta.));
-
- m_OtherLicenseUrl = m_rootProperty.FindPropertyRelative(nameof(VRM10ObjectMeta.OtherLicenseUrl));
}
public static VRM10MetaEditor Create(SerializedObject serializedObject)
@@ -222,18 +192,10 @@ namespace UniVRM10
protected override void RecursiveProperty(SerializedProperty root)
{
- if (VRMVersion.IsNewer(m_exporterVersion.stringValue))
- {
- EditorGUILayout.HelpBox("Check UniVRM new version. https://github.com/dwango/UniVRM/releases", MessageType.Warning);
- }
-
// texture
EditorGUILayout.BeginHorizontal();
{
EditorGUILayout.BeginVertical();
- GUI.enabled = false;
- EditorGUILayout.PropertyField(m_exporterVersion);
- GUI.enabled = true;
EditorGUILayout.PropertyField(m_thumbnail);
EditorGUILayout.EndVertical();
m_thumbnail.objectReferenceValue = TextureField("", (Texture2D)m_thumbnail.objectReferenceValue, 100);
@@ -243,34 +205,37 @@ namespace UniVRM10
m_foldoutInfo = EditorGUILayout.Foldout(m_foldoutInfo, "Information");
if (m_foldoutInfo)
{
- m_title.OnGUI();
+ m_name.OnGUI();
m_version.OnGUI();
- m_author.OnGUI();
+ m_authors.OnGUI();
+ m_copyright.OnGUI();
m_contact.OnGUI();
- m_reference.OnGUI();
+ m_references.OnGUI();
+ m_thirdPartyLicenses.OnGUI();
+ m_OtherLicenseUrl.OnGUI();
}
- // EditorGUILayout.LabelField("License ", EditorStyles.boldLabel);
+
m_foldoutPermission = EditorGUILayout.Foldout(m_foldoutPermission, Msg(MessageKeys.PERSONATION));
if (m_foldoutPermission)
{
var backup = EditorGUIUtility.labelWidth;
- RightFixedPropField(m_AllowedUser, Msg(MessageKeys.ALLOWED_USER));
+ RightFixedPropField(m_AvatarPermission, Msg(MessageKeys.ALLOWED_USER));
RightFixedPropField(m_ViolentUssage, Msg(MessageKeys.VIOLENT_USAGE));
RightFixedPropField(m_SexualUssage, Msg(MessageKeys.SEXUAL_USAGE));
RightFixedPropField(m_CommercialUssage, Msg(MessageKeys.COMMERCIAL_USAGE));
- EditorGUILayout.PropertyField(m_OtherPermissionUrl, new GUIContent("Other License Url"));
+ RightFixedPropField(m_PoliticalOrReligiousUsage, Msg(MessageKeys.POLITICAL_USAGE));
+ RightFixedPropField(m_AntisocialOrHateUsage, Msg(MessageKeys.ANTI_USAGE));
EditorGUIUtility.labelWidth = backup;
}
m_foldoutDistribution = EditorGUILayout.Foldout(m_foldoutDistribution, Msg(MessageKeys.REDISTRIBUTION_MODIFICATIONS));
if (m_foldoutDistribution)
{
- // var licenseType = m_LicenseType;
- // EditorGUILayout.PropertyField(licenseType);
- // if ((LicenseType)licenseType.intValue == LicenseType.Other)
- // {
- // EditorGUILayout.PropertyField(m_OtherLicenseUrl);
- // }
+ var backup = EditorGUIUtility.labelWidth;
+ RightFixedPropField(m_CreditNotation, Msg(MessageKeys.MOD_CREDIT));
+ RightFixedPropField(m_Redistribution, Msg(MessageKeys.MOD_REDISTRIBUTION));
+ RightFixedPropField(m_Modification, Msg(MessageKeys.MOD_MODIFICATION));
+ EditorGUIUtility.labelWidth = backup;
}
}
}
diff --git a/Assets/VRM10/Editor/Components/VRM10MetaPropertyValidator.cs b/Assets/VRM10/Editor/Components/VRM10MetaPropertyValidator.cs
new file mode 100644
index 000000000..ac016cb4a
--- /dev/null
+++ b/Assets/VRM10/Editor/Components/VRM10MetaPropertyValidator.cs
@@ -0,0 +1,64 @@
+using UnityEditor;
+
+namespace UniVRM10
+{
+ delegate (string, MessageType) VRM10MetaPropertyValidator(SerializedProperty prop);
+
+ class VRM10MetaProperty
+ {
+ public SerializedProperty m_prop;
+
+ VRM10MetaPropertyValidator m_validator;
+
+ public VRM10MetaProperty(SerializedProperty prop,
+ VRM10MetaPropertyValidator validator = null)
+ {
+ m_prop = prop;
+ if (validator == null)
+ {
+ // no validation
+ validator = _ => ("", MessageType.None);
+ }
+ m_validator = validator;
+ }
+
+ public void OnGUI()
+ {
+ // var old = m_prop.stringValue;
+ if (m_prop.propertyType == SerializedPropertyType.Generic)
+ {
+ if (m_prop.arrayElementType != null)
+ {
+ EditorGUILayout.LabelField(m_prop.name);
+
+ var depth = m_prop.depth;
+ var iterator = m_prop.Copy();
+ for (var enterChildren = true; iterator.NextVisible(enterChildren); enterChildren = false)
+ {
+ if (iterator.depth < depth)
+ break;
+
+ depth = iterator.depth;
+
+ // using (new EditorGUI.DisabledScope("m_Script" == iterator.propertyPath))
+ EditorGUILayout.PropertyField(iterator, true);
+ }
+ }
+ else
+ {
+ throw new System.NotImplementedException();
+ }
+ }
+ else
+ {
+ EditorGUILayout.PropertyField(m_prop);
+ }
+ var (msg, msgType) = m_validator(m_prop);
+ if (!string.IsNullOrEmpty(msg))
+ {
+ EditorGUILayout.HelpBox(msg, msgType);
+ }
+ // return old != m_prop.stringValue;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/VRM10/Runtime/Migration/Vrm10Meta.cs.meta b/Assets/VRM10/Editor/Components/VRM10MetaPropertyValidator.cs.meta
similarity index 83%
rename from Assets/VRM10/Runtime/Migration/Vrm10Meta.cs.meta
rename to Assets/VRM10/Editor/Components/VRM10MetaPropertyValidator.cs.meta
index efd52afc5..18e53bdbe 100644
--- a/Assets/VRM10/Runtime/Migration/Vrm10Meta.cs.meta
+++ b/Assets/VRM10/Editor/Components/VRM10MetaPropertyValidator.cs.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 57e782f0f79ef4d4abcd4f1c5438e9e7
+guid: f0f1ce72ffff9a9498f2d4f73dd370f5
MonoImporter:
externalObjects: {}
serializedVersion: 2
diff --git a/Assets/VRM10/Runtime/Components/VRM10Object/VRM10ObjectMeta.cs b/Assets/VRM10/Runtime/Components/VRM10Object/VRM10ObjectMeta.cs
index d0f51e3b4..17c0e0c28 100644
--- a/Assets/VRM10/Runtime/Components/VRM10Object/VRM10ObjectMeta.cs
+++ b/Assets/VRM10/Runtime/Components/VRM10Object/VRM10ObjectMeta.cs
@@ -10,9 +10,6 @@ namespace UniVRM10
[Serializable]
public class VRM10ObjectMeta
{
- [SerializeField]
- public string ExporterVersion;
-
#region Info
[SerializeField]
public string Name;
@@ -21,10 +18,10 @@ namespace UniVRM10
public string Version;
[SerializeField]
- public string CopyrightInformation;
+ public List Authors = new List();
[SerializeField]
- public List Authors = new List();
+ public string CopyrightInformation;
[SerializeField]
public string ContactInformation;
@@ -32,13 +29,16 @@ namespace UniVRM10
[SerializeField]
public List References = new List();
+ [SerializeField]
+ public string ThirdPartyLicenses;
+
[SerializeField]
public Texture2D Thumbnail;
#endregion
#region AvatarPermission
[SerializeField, Tooltip("A person who can perform with this avatar")]
- public UniGLTF.Extensions.VRMC_vrm.AvatarPermissionType AllowedUser;
+ public UniGLTF.Extensions.VRMC_vrm.AvatarPermissionType AvatarPermission;
[SerializeField, Tooltip("Violent acts using this avatar")]
public bool ViolentUsage;
@@ -49,17 +49,11 @@ namespace UniVRM10
[SerializeField, Tooltip("For commercial use")]
public UniGLTF.Extensions.VRMC_vrm.CommercialUsageType CommercialUsage;
- [SerializeField]
- public bool GameUsage;
-
[SerializeField]
public bool PoliticalOrReligiousUsage;
[SerializeField]
public bool AntisocialOrHateUsage;
-
- [SerializeField, Tooltip("Other License Url")]
- public string OtherPermissionUrl;
#endregion
#region Distribution License
@@ -70,7 +64,7 @@ namespace UniVRM10
public bool Redistribution;
[SerializeField]
- public UniGLTF.Extensions.VRMC_vrm.ModificationType ModificationLicense;
+ public UniGLTF.Extensions.VRMC_vrm.ModificationType Modification;
[SerializeField]
public string OtherLicenseUrl;
@@ -96,7 +90,6 @@ namespace UniVRM10
public void CopyTo(VRM10ObjectMeta dst)
{
- dst.ExporterVersion = ExporterVersion;
dst.Name = Name;
dst.Version = Version;
dst.CopyrightInformation = CopyrightInformation;
@@ -110,17 +103,16 @@ namespace UniVRM10
}
dst.ContactInformation = ContactInformation;
dst.References = References;
+ dst.ThirdPartyLicenses = ThirdPartyLicenses;
dst.Thumbnail = Thumbnail;
- dst.AllowedUser = AllowedUser;
+ dst.AvatarPermission = AvatarPermission;
dst.ViolentUsage = ViolentUsage;
dst.SexualUsage = SexualUsage;
dst.CommercialUsage = CommercialUsage;
- dst.GameUsage = GameUsage;
dst.PoliticalOrReligiousUsage = PoliticalOrReligiousUsage;
- dst.OtherPermissionUrl = OtherPermissionUrl;
dst.CreditNotation = CreditNotation;
dst.Redistribution = Redistribution;
- dst.ModificationLicense = ModificationLicense;
+ dst.Modification = Modification;
dst.OtherLicenseUrl = OtherLicenseUrl;
}
}
diff --git a/Assets/VRM10/Runtime/IO/Vrm10Exporter.cs b/Assets/VRM10/Runtime/IO/Vrm10Exporter.cs
index fac6c4d8c..2e9ea4f71 100644
--- a/Assets/VRM10/Runtime/IO/Vrm10Exporter.cs
+++ b/Assets/VRM10/Runtime/IO/Vrm10Exporter.cs
@@ -686,8 +686,8 @@ namespace UniVRM10
vrm.Meta.CopyrightInformation = meta.CopyrightInformation;
vrm.Meta.ContactInformation = meta.ContactInformation;
vrm.Meta.References = meta.References.ToList();
- // vrm.Meta.ThirdPartyLicenses =
- vrm.Meta.AvatarPermission = meta.AllowedUser;
+ vrm.Meta.ThirdPartyLicenses = meta.ThirdPartyLicenses;
+ vrm.Meta.AvatarPermission = meta.AvatarPermission;
vrm.Meta.AllowExcessivelyViolentUsage = meta.ViolentUsage;
vrm.Meta.AllowExcessivelySexualUsage = meta.SexualUsage;
vrm.Meta.CommercialUsage = meta.CommercialUsage;
@@ -695,7 +695,7 @@ namespace UniVRM10
vrm.Meta.AllowAntisocialOrHateUsage = meta.AntisocialOrHateUsage;
vrm.Meta.CreditNotation = meta.CreditNotation;
vrm.Meta.AllowRedistribution = meta.Redistribution;
- vrm.Meta.Modification = meta.ModificationLicense;
+ vrm.Meta.Modification = meta.Modification;
vrm.Meta.OtherLicenseUrl = meta.OtherLicenseUrl;
int? thumbnailTextureIndex = default;
if (meta.Thumbnail != null)
diff --git a/Assets/VRM10/Runtime/IO/Vrm10Importer.cs b/Assets/VRM10/Runtime/IO/Vrm10Importer.cs
index 0ae638add..6ebdf76c0 100644
--- a/Assets/VRM10/Runtime/IO/Vrm10Importer.cs
+++ b/Assets/VRM10/Runtime/IO/Vrm10Importer.cs
@@ -361,8 +361,9 @@ namespace UniVRM10
meta.Name = src.Name;
meta.Version = src.Version;
meta.ContactInformation = src.ContactInformation;
+ meta.ThirdPartyLicenses = src.ThirdPartyLicenses;
// avatar
- meta.AllowedUser = src.AvatarPermission;
+ meta.AvatarPermission = src.AvatarPermission;
meta.ViolentUsage = src.AllowExcessivelyViolentUsage.GetValueOrDefault();
meta.SexualUsage = src.AllowExcessivelySexualUsage.GetValueOrDefault();
meta.CommercialUsage = src.CommercialUsage;
@@ -372,7 +373,7 @@ namespace UniVRM10
meta.CreditNotation = src.CreditNotation;
meta.Redistribution = src.AllowRedistribution.GetValueOrDefault();
- meta.ModificationLicense = src.Modification;
+ meta.Modification = src.Modification;
meta.OtherLicenseUrl = src.OtherLicenseUrl;
//
if (src.References != null)
diff --git a/Assets/VRM10/Runtime/Migration/Vrm10Meta.cs b/Assets/VRM10/Runtime/Migration/Vrm0Meta.cs
similarity index 100%
rename from Assets/VRM10/Runtime/Migration/Vrm10Meta.cs
rename to Assets/VRM10/Runtime/Migration/Vrm0Meta.cs
diff --git a/Assets/VRM10/Runtime/Migration/Vrm0Meta.cs.meta b/Assets/VRM10/Runtime/Migration/Vrm0Meta.cs.meta
new file mode 100644
index 000000000..1c0fe23bc
--- /dev/null
+++ b/Assets/VRM10/Runtime/Migration/Vrm0Meta.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 09c88afc4ee72dc4099b705970f5a13e
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/vrm-specification b/vrm-specification
index 04e3bb252..f2d8f1582 160000
--- a/vrm-specification
+++ b/vrm-specification
@@ -1 +1 @@
-Subproject commit 04e3bb25258670c2460c554dfe3db2e05543b87c
+Subproject commit f2d8f158297fc883aef9c3071ca68fbe46b03f45