|
@@ -13,7 +13,6 @@ namespace GFGGame
|
|
private UI_LeagueAnsweringUI _ui;
|
|
private UI_LeagueAnsweringUI _ui;
|
|
private EffectUI _effectUI1;
|
|
private EffectUI _effectUI1;
|
|
private EffectUI _effectUI2;
|
|
private EffectUI _effectUI2;
|
|
- private LeagueDataManager _dataManager;
|
|
|
|
private List<long> _memberIds;
|
|
private List<long> _memberIds;
|
|
|
|
|
|
public override void Dispose()
|
|
public override void Dispose()
|
|
@@ -65,10 +64,21 @@ namespace GFGGame
|
|
EventAgent.AddEventListener(ConstMessage.LEAGUE_ANSWER_MEMBER_CHANGE, UpdateJoinList);
|
|
EventAgent.AddEventListener(ConstMessage.LEAGUE_ANSWER_MEMBER_CHANGE, UpdateJoinList);
|
|
EventAgent.AddEventListener(ConstMessage.NOTICE_CHAT_MESSAGE, UpdateChatList);
|
|
EventAgent.AddEventListener(ConstMessage.NOTICE_CHAT_MESSAGE, UpdateChatList);
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ protected override void RemoveEventListener()
|
|
|
|
+ {
|
|
|
|
+ EventAgent.RemoveEventListener(ConstMessage.LEAGUE_ANSWER_START, UpdateQuestion);
|
|
|
|
+ EventAgent.RemoveEventListener(ConstMessage.LEAGUE_ANSWER_END, UpdateResult);
|
|
|
|
+ EventAgent.RemoveEventListener(ConstMessage.LEAGUE_ANSWER_RESULT_CHANGE, UpdateResult);
|
|
|
|
+ EventAgent.RemoveEventListener(ConstMessage.LEAGUE_ANSWER_RESULT_CHANGE, UpdateJoinList);
|
|
|
|
+ EventAgent.RemoveEventListener(ConstMessage.LEAGUE_ANSWER_MEMBER_CHANGE, UpdateJoinList);
|
|
|
|
+ EventAgent.RemoveEventListener(ConstMessage.NOTICE_CHAT_MESSAGE, UpdateChatList);
|
|
|
|
+ base.RemoveEventListener();
|
|
|
|
+ }
|
|
|
|
+
|
|
protected override async void OnShown()
|
|
protected override async void OnShown()
|
|
{
|
|
{
|
|
base.OnShown();
|
|
base.OnShown();
|
|
- _dataManager = LeagueDataManager.Instance;
|
|
|
|
|
|
|
|
bool result = await LeagueSproxy.ReqJoinAnswer();
|
|
bool result = await LeagueSproxy.ReqJoinAnswer();
|
|
if (result)
|
|
if (result)
|
|
@@ -88,16 +98,10 @@ namespace GFGGame
|
|
Timers.inst.Remove(UpdateActiveTime);
|
|
Timers.inst.Remove(UpdateActiveTime);
|
|
_ui.m_holderHead.visible = false;
|
|
_ui.m_holderHead.visible = false;
|
|
}
|
|
}
|
|
-
|
|
|
|
- protected override void RemoveEventListener()
|
|
|
|
- {
|
|
|
|
- base.RemoveEventListener();
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
|
|
+
|
|
private void OnBtnBackClick()
|
|
private void OnBtnBackClick()
|
|
{
|
|
{
|
|
- if (_dataManager.LastAnswerRoleData.LastQuestionResult == LastQuestionResult.Ending)
|
|
|
|
|
|
+ if (LeagueDataManager.Instance.LastAnswerRoleData.LastQuestionResult == LastQuestionResult.Ending)
|
|
{
|
|
{
|
|
LeagueSproxy.ReqQuitAnswer().Coroutine();
|
|
LeagueSproxy.ReqQuitAnswer().Coroutine();
|
|
ViewManager.GoBackFrom(typeof(LeagueAnsweringView).FullName);
|
|
ViewManager.GoBackFrom(typeof(LeagueAnsweringView).FullName);
|
|
@@ -159,7 +163,7 @@ namespace GFGGame
|
|
}
|
|
}
|
|
private void UpdateQuestionState()
|
|
private void UpdateQuestionState()
|
|
{
|
|
{
|
|
- if (_dataManager.GetNumeriValue(LeagueNumericType.LeagueQuestionStatus) == LeagueQuestionStatus.Open)//答题中
|
|
|
|
|
|
+ if (LeagueDataManager.Instance.GetNumeriValue(LeagueNumericType.LeagueQuestionStatus) == LeagueQuestionStatus.Open)//答题中
|
|
{
|
|
{
|
|
UpdateQuestion();
|
|
UpdateQuestion();
|
|
}
|
|
}
|
|
@@ -172,21 +176,21 @@ namespace GFGGame
|
|
private void UpdateQuestion()
|
|
private void UpdateQuestion()
|
|
{
|
|
{
|
|
_ui.m_holderHead.visible = false;
|
|
_ui.m_holderHead.visible = false;
|
|
- _ui.m_txtRightCount.SetVar("value", _dataManager.GetNumeriValue(LeagueNumericType.LeagueQuestionTrueCount).ToString()).FlushVars(); ;
|
|
|
|
- _ui.m_txtRightCount1.SetVar("value", _dataManager.GetNumeriValue(LeagueNumericType.LeagueQuestionTrueCount).ToString()).FlushVars(); ;
|
|
|
|
|
|
+ _ui.m_txtRightCount.SetVar("value", LeagueDataManager.Instance.GetNumeriValue(LeagueNumericType.LeagueQuestionTrueCount).ToString()).FlushVars(); ;
|
|
|
|
+ _ui.m_txtRightCount1.SetVar("value", LeagueDataManager.Instance.GetNumeriValue(LeagueNumericType.LeagueQuestionTrueCount).ToString()).FlushVars(); ;
|
|
_ui.m_ctrlQuestionState.selectedIndex = 0;
|
|
_ui.m_ctrlQuestionState.selectedIndex = 0;
|
|
- int questionId = (int)_dataManager.GetNumeriValue(LeagueNumericType.LeagueQuestionId);
|
|
|
|
|
|
+ int questionId = (int)LeagueDataManager.Instance.GetNumeriValue(LeagueNumericType.LeagueQuestionId);
|
|
LeagueQuestionCfg questionCfg = LeagueQuestionCfgArray.Instance.GetCfg(questionId);
|
|
LeagueQuestionCfg questionCfg = LeagueQuestionCfgArray.Instance.GetCfg(questionId);
|
|
|
|
|
|
- _ui.m_txtAnswerNum.text = string.Format("第{0}/{1}题", _dataManager.GetNumeriValue(LeagueNumericType.LeagueQuestionCount), GlobalCfgArray.globalCfg.leagueQuestionNum);
|
|
|
|
|
|
+ _ui.m_txtAnswerNum.text = string.Format("第{0}/{1}题", LeagueDataManager.Instance.GetNumeriValue(LeagueNumericType.LeagueQuestionCount), GlobalCfgArray.globalCfg.leagueQuestionNum);
|
|
_ui.m_ctrlHasIcon.selectedIndex = string.IsNullOrEmpty(questionCfg.res) ? 1 : 0;
|
|
_ui.m_ctrlHasIcon.selectedIndex = string.IsNullOrEmpty(questionCfg.res) ? 1 : 0;
|
|
_ui.m_loaIocn.url = string.IsNullOrEmpty(questionCfg.res) ? "" : ResPathUtil.GetIconPath(questionCfg.res, "png");
|
|
_ui.m_loaIocn.url = string.IsNullOrEmpty(questionCfg.res) ? "" : ResPathUtil.GetIconPath(questionCfg.res, "png");
|
|
_ui.m_txtContent.text = questionCfg.question;
|
|
_ui.m_txtContent.text = questionCfg.question;
|
|
|
|
|
|
- bool isAnswer = !string.IsNullOrEmpty(_dataManager.LastAnswerRoleData.MyAnswer) && _dataManager.LastAnswerRoleData.LastQuestionId == _dataManager.GetNumeriValue(LeagueNumericType.LeagueQuestionId);
|
|
|
|
- _ui.m_txtResult.text = isAnswer ? _dataManager.LastAnswerRoleData.MyAnswer : "";
|
|
|
|
- _ui.m_txtResult.enabled = !(isAnswer && _dataManager.LastAnswerRoleData.MyAnswer != questionCfg.answerCorrect);
|
|
|
|
- _ui.m_imgFault.visible = isAnswer && _dataManager.LastAnswerRoleData.MyAnswer != questionCfg.answerCorrect;
|
|
|
|
|
|
+ bool isAnswer = !string.IsNullOrEmpty(LeagueDataManager.Instance.LastAnswerRoleData.MyAnswer) && LeagueDataManager.Instance.LastAnswerRoleData.LastQuestionId == LeagueDataManager.Instance.GetNumeriValue(LeagueNumericType.LeagueQuestionId);
|
|
|
|
+ _ui.m_txtResult.text = isAnswer ? LeagueDataManager.Instance.LastAnswerRoleData.MyAnswer : "";
|
|
|
|
+ _ui.m_txtResult.enabled = !(isAnswer && LeagueDataManager.Instance.LastAnswerRoleData.MyAnswer != questionCfg.answerCorrect);
|
|
|
|
+ _ui.m_imgFault.visible = isAnswer && LeagueDataManager.Instance.LastAnswerRoleData.MyAnswer != questionCfg.answerCorrect;
|
|
_ui.m_ctrlQuestionType.selectedIndex = questionCfg.type;
|
|
_ui.m_ctrlQuestionType.selectedIndex = questionCfg.type;
|
|
if (questionCfg.type == 1)
|
|
if (questionCfg.type == 1)
|
|
{
|
|
{
|
|
@@ -213,19 +217,19 @@ namespace GFGGame
|
|
}
|
|
}
|
|
private void UpdateResult()
|
|
private void UpdateResult()
|
|
{
|
|
{
|
|
- _ui.m_ctrlResult.selectedIndex = _dataManager.LastAnswerRoleData.LastQuestionResult;
|
|
|
|
- _ui.m_txtRightCount.text = string.Format("全员已答对{0}题", _dataManager.GetNumeriValue(LeagueNumericType.LeagueQuestionTrueCount));
|
|
|
|
- _ui.m_txtRightCount.SetVar("value", _dataManager.GetNumeriValue(LeagueNumericType.LeagueQuestionTrueCount).ToString()).FlushVars();
|
|
|
|
- _ui.m_txtRightCount1.SetVar("value", _dataManager.GetNumeriValue(LeagueNumericType.LeagueQuestionTrueCount).ToString()).FlushVars();
|
|
|
|
|
|
+ _ui.m_ctrlResult.selectedIndex = LeagueDataManager.Instance.LastAnswerRoleData.LastQuestionResult;
|
|
|
|
+ _ui.m_txtRightCount.text = string.Format("全员已答对{0}题", LeagueDataManager.Instance.GetNumeriValue(LeagueNumericType.LeagueQuestionTrueCount));
|
|
|
|
+ _ui.m_txtRightCount.SetVar("value", LeagueDataManager.Instance.GetNumeriValue(LeagueNumericType.LeagueQuestionTrueCount).ToString()).FlushVars();
|
|
|
|
+ _ui.m_txtRightCount1.SetVar("value", LeagueDataManager.Instance.GetNumeriValue(LeagueNumericType.LeagueQuestionTrueCount).ToString()).FlushVars();
|
|
_ui.m_txtCdTime.SetVar("value", GlobalCfgArray.globalCfg.leagueQuestionNextTime.ToString()).FlushVars();
|
|
_ui.m_txtCdTime.SetVar("value", GlobalCfgArray.globalCfg.leagueQuestionNextTime.ToString()).FlushVars();
|
|
_ui.m_ctrlQuestionState.selectedIndex = 1;
|
|
_ui.m_ctrlQuestionState.selectedIndex = 1;
|
|
|
|
|
|
- if (_dataManager.LastAnswerRoleData.LastQuestionResult == LastQuestionResult.SomeBodyRight)
|
|
|
|
|
|
+ if (LeagueDataManager.Instance.LastAnswerRoleData.LastQuestionResult == LastQuestionResult.SomeBodyRight)
|
|
{
|
|
{
|
|
|
|
|
|
_ui.m_comRightHead.target.visible = true;
|
|
_ui.m_comRightHead.target.visible = true;
|
|
_ui.m_imgFail.visible = false;
|
|
_ui.m_imgFail.visible = false;
|
|
- OtherRoleInfoData roleInfoData = _dataManager.GetMemberRoleInfo(_dataManager.LastAnswerRoleData.RightRoleId);
|
|
|
|
|
|
+ OtherRoleInfoData roleInfoData = LeagueDataManager.Instance.GetMemberRoleInfo(LeagueDataManager.Instance.LastAnswerRoleData.RightRoleId);
|
|
ItemCfg headCfg = ItemCfgArray.Instance.GetCfg(roleInfoData.headId == 0 ? ConstItemID.HEADID : roleInfoData.headId);
|
|
ItemCfg headCfg = ItemCfgArray.Instance.GetCfg(roleInfoData.headId == 0 ? ConstItemID.HEADID : roleInfoData.headId);
|
|
_ui.m_comRightHead.m_loaIcon.url = ResPathUtil.GetHeadPath(headCfg.res);
|
|
_ui.m_comRightHead.m_loaIcon.url = ResPathUtil.GetHeadPath(headCfg.res);
|
|
_ui.m_txtInfo.text = string.Format("{0} 答对了!", roleInfoData.roleName);
|
|
_ui.m_txtInfo.text = string.Format("{0} 答对了!", roleInfoData.roleName);
|
|
@@ -233,7 +237,7 @@ namespace GFGGame
|
|
Timers.inst.Remove(UpdateResultTime);
|
|
Timers.inst.Remove(UpdateResultTime);
|
|
Timers.inst.Add(1, 0, UpdateResultTime);
|
|
Timers.inst.Add(1, 0, UpdateResultTime);
|
|
}
|
|
}
|
|
- else if (_dataManager.LastAnswerRoleData.LastQuestionResult == LastQuestionResult.NobodyRight)
|
|
|
|
|
|
+ else if (LeagueDataManager.Instance.LastAnswerRoleData.LastQuestionResult == LastQuestionResult.NobodyRight)
|
|
{
|
|
{
|
|
_ui.m_comRightHead.target.visible = false;
|
|
_ui.m_comRightHead.target.visible = false;
|
|
_ui.m_imgFail.visible = true;
|
|
_ui.m_imgFail.visible = true;
|
|
@@ -245,7 +249,7 @@ namespace GFGGame
|
|
{
|
|
{
|
|
_ui.m_comRightHead.target.visible = false;
|
|
_ui.m_comRightHead.target.visible = false;
|
|
_ui.m_imgFail.visible = false;
|
|
_ui.m_imgFail.visible = false;
|
|
- if (_dataManager.GetNumeriValue(LeagueNumericType.LeagueQuestionCount) == GlobalCfgArray.globalCfg.leagueQuestionNum)//全部答完
|
|
|
|
|
|
+ if (LeagueDataManager.Instance.GetNumeriValue(LeagueNumericType.LeagueQuestionCount) == GlobalCfgArray.globalCfg.leagueQuestionNum)//全部答完
|
|
{
|
|
{
|
|
_ui.m_txtInfo.text = "全部题目答完啦~";
|
|
_ui.m_txtInfo.text = "全部题目答完啦~";
|
|
}
|
|
}
|
|
@@ -270,16 +274,16 @@ namespace GFGGame
|
|
}
|
|
}
|
|
private void UpdateJoinList()
|
|
private void UpdateJoinList()
|
|
{
|
|
{
|
|
- _memberIds = new List<long>(_dataManager.ListAnsweringDatas.Keys);
|
|
|
|
|
|
+ _memberIds = new List<long>(LeagueDataManager.Instance.ListAnsweringDatas.Keys);
|
|
_ui.m_listJoin.numItems = _memberIds.Count;
|
|
_ui.m_listJoin.numItems = _memberIds.Count;
|
|
- _ui.m_txtJoinNum.text = string.Format("当前参与人员:{0}/{1}", _memberIds.Count, _dataManager.LeagueData.LeagueMemberDatas.Count);
|
|
|
|
|
|
+ _ui.m_txtJoinNum.text = string.Format("当前参与人员:{0}/{1}", _memberIds.Count, LeagueDataManager.Instance.LeagueData.LeagueMemberDatas.Count);
|
|
}
|
|
}
|
|
private void UpdateChatList()
|
|
private void UpdateChatList()
|
|
{
|
|
{
|
|
_memberIds.Sort((long a, long b) =>
|
|
_memberIds.Sort((long a, long b) =>
|
|
{
|
|
{
|
|
- int countA = _dataManager.ListAnsweringDatas[a];
|
|
|
|
- int countB = _dataManager.ListAnsweringDatas[b];
|
|
|
|
|
|
+ int countA = LeagueDataManager.Instance.ListAnsweringDatas[a];
|
|
|
|
+ int countB = LeagueDataManager.Instance.ListAnsweringDatas[b];
|
|
if (countA > countB) return -1;
|
|
if (countA > countB) return -1;
|
|
if (countB > countA) return 1;
|
|
if (countB > countA) return 1;
|
|
return countB - countA;
|
|
return countB - countA;
|
|
@@ -289,7 +293,7 @@ namespace GFGGame
|
|
}
|
|
}
|
|
private void RenderListResultItem(int index, GObject obj)
|
|
private void RenderListResultItem(int index, GObject obj)
|
|
{
|
|
{
|
|
- int questionId = (int)_dataManager.GetNumeriValue(LeagueNumericType.LeagueQuestionId);
|
|
|
|
|
|
+ int questionId = (int)LeagueDataManager.Instance.GetNumeriValue(LeagueNumericType.LeagueQuestionId);
|
|
LeagueQuestionCfg cfg = LeagueQuestionCfgArray.Instance.GetCfg(questionId); ;
|
|
LeagueQuestionCfg cfg = LeagueQuestionCfgArray.Instance.GetCfg(questionId); ;
|
|
UI_Button123 item = UI_Button123.Proxy(obj);
|
|
UI_Button123 item = UI_Button123.Proxy(obj);
|
|
int data = index + 1;
|
|
int data = index + 1;
|
|
@@ -301,8 +305,8 @@ namespace GFGGame
|
|
// item.target.title = string.Format("{0}.{1} 正确", data, cfg.answerArr[index]);
|
|
// item.target.title = string.Format("{0}.{1} 正确", data, cfg.answerArr[index]);
|
|
//}
|
|
//}
|
|
|
|
|
|
- string myAnswer = _dataManager.LastAnswerRoleData.MyAnswer;
|
|
|
|
- bool isAnswer = !string.IsNullOrEmpty(_dataManager.LastAnswerRoleData.MyAnswer) && _dataManager.LastAnswerRoleData.LastQuestionId == _dataManager.GetNumeriValue(LeagueNumericType.LeagueQuestionId);
|
|
|
|
|
|
+ string myAnswer = LeagueDataManager.Instance.LastAnswerRoleData.MyAnswer;
|
|
|
|
+ bool isAnswer = !string.IsNullOrEmpty(LeagueDataManager.Instance.LastAnswerRoleData.MyAnswer) && LeagueDataManager.Instance.LastAnswerRoleData.LastQuestionId == LeagueDataManager.Instance.GetNumeriValue(LeagueNumericType.LeagueQuestionId);
|
|
item.target.touchable = !isAnswer;
|
|
item.target.touchable = !isAnswer;
|
|
item.m_c1.selectedIndex = isAnswer && myAnswer == data.ToString() && myAnswer != cfg.answerCorrect.ToString() ? 0 : 1;
|
|
item.m_c1.selectedIndex = isAnswer && myAnswer == data.ToString() && myAnswer != cfg.answerCorrect.ToString() ? 0 : 1;
|
|
if (item.target.data == null)
|
|
if (item.target.data == null)
|
|
@@ -316,7 +320,7 @@ namespace GFGGame
|
|
{
|
|
{
|
|
GObject obj = context.sender as GObject;
|
|
GObject obj = context.sender as GObject;
|
|
string answer = obj.data.ToString();
|
|
string answer = obj.data.ToString();
|
|
- int questionId = (int)_dataManager.GetNumeriValue(LeagueNumericType.LeagueQuestionId);
|
|
|
|
|
|
+ int questionId = (int)LeagueDataManager.Instance.GetNumeriValue(LeagueNumericType.LeagueQuestionId);
|
|
LeagueQuestionCfg cfg = LeagueQuestionCfgArray.Instance.GetCfg(questionId);
|
|
LeagueQuestionCfg cfg = LeagueQuestionCfgArray.Instance.GetCfg(questionId);
|
|
bool result = await LeagueSproxy.ReqAnswerQuestion(questionId, answer);
|
|
bool result = await LeagueSproxy.ReqAnswerQuestion(questionId, answer);
|
|
if (result)
|
|
if (result)
|
|
@@ -331,7 +335,7 @@ namespace GFGGame
|
|
PromptController.Instance.ShowFloatTextPrompt("还没有输入答案哦");
|
|
PromptController.Instance.ShowFloatTextPrompt("还没有输入答案哦");
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
- int questionId = (int)_dataManager.GetNumeriValue(LeagueNumericType.LeagueQuestionId);
|
|
|
|
|
|
+ int questionId = (int)LeagueDataManager.Instance.GetNumeriValue(LeagueNumericType.LeagueQuestionId);
|
|
bool result = await LeagueSproxy.ReqAnswerQuestion(questionId, _ui.m_txtResult.text);
|
|
bool result = await LeagueSproxy.ReqAnswerQuestion(questionId, _ui.m_txtResult.text);
|
|
if (result)
|
|
if (result)
|
|
{
|
|
{
|
|
@@ -342,11 +346,11 @@ namespace GFGGame
|
|
}
|
|
}
|
|
private void RenderListJoinItem(int index, GObject obj)
|
|
private void RenderListJoinItem(int index, GObject obj)
|
|
{
|
|
{
|
|
- OtherRoleInfoData roleInfo = _dataManager.GetMemberRoleInfo(_memberIds[index]);
|
|
|
|
|
|
+ OtherRoleInfoData roleInfo = LeagueDataManager.Instance.GetMemberRoleInfo(_memberIds[index]);
|
|
UI_ListAnswerJoinItem item = UI_ListAnswerJoinItem.Proxy(obj);
|
|
UI_ListAnswerJoinItem item = UI_ListAnswerJoinItem.Proxy(obj);
|
|
RoleInfoManager.Instance.UpdateHead(item.m_comHead, roleInfo.headId, roleInfo.headBorderId);
|
|
RoleInfoManager.Instance.UpdateHead(item.m_comHead, roleInfo.headId, roleInfo.headBorderId);
|
|
item.m_txtName.text = roleInfo.roleName;
|
|
item.m_txtName.text = roleInfo.roleName;
|
|
- item.m_txtAnswerCount.text = _dataManager.ListAnsweringDatas[roleInfo.roleId].ToString();
|
|
|
|
|
|
+ item.m_txtAnswerCount.text = LeagueDataManager.Instance.ListAnsweringDatas[roleInfo.roleId].ToString();
|
|
UI_ListAnswerJoinItem.ProxyEnd();
|
|
UI_ListAnswerJoinItem.ProxyEnd();
|
|
}
|
|
}
|
|
private void RenderListChatItem(int index, GObject obj)
|
|
private void RenderListChatItem(int index, GObject obj)
|
|
@@ -358,7 +362,7 @@ namespace GFGGame
|
|
RoleInfoManager.Instance.UpdateHeadWithLv(item.m_comHead, roleInfo.headId, roleInfo.headBorderId, roleInfo.roleLv);
|
|
RoleInfoManager.Instance.UpdateHeadWithLv(item.m_comHead, roleInfo.headId, roleInfo.headBorderId, roleInfo.roleLv);
|
|
item.m_txtName.text = roleInfo.roleName;
|
|
item.m_txtName.text = roleInfo.roleName;
|
|
int roldRank = _memberIds.IndexOf(roleInfo.roleId);
|
|
int roldRank = _memberIds.IndexOf(roleInfo.roleId);
|
|
- item.m_c1.selectedIndex = roldRank < 3 && _dataManager.ListAnsweringDatas[roleInfo.roleId] > 0 ? roldRank : 3;
|
|
|
|
|
|
+ item.m_c1.selectedIndex = roldRank < 3 && LeagueDataManager.Instance.ListAnsweringDatas[roleInfo.roleId] > 0 ? roldRank : 3;
|
|
string content = "";
|
|
string content = "";
|
|
for (int i = 0; i < chatData.Content.Length; i++)
|
|
for (int i = 0; i < chatData.Content.Length; i++)
|
|
{
|
|
{
|