Enhanced after version 14 (#30)

* Add log tab
* Merge control mesg & duty log
* Fix ping (calc loss)
* Add current connection in ping tab. Able to copy by double clicking item
* Log font has moved to config
* Add debug enable on config + save
* Display ping failed reason (debug enable)
* Handled copy exception
* New content list in duty tab
* Show loss rate option in ping tab
* Rename Chinese packet info file (No data)
* Bigger UI font
This commit is contained in:
ksh 2021-08-14 23:35:53 +09:00 committed by GitHub
parent 7ece3cf30f
commit cbfa535d20
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
39 changed files with 3560 additions and 1142 deletions

View file

@ -6,8 +6,8 @@ LANG=日本語
2=FFXIV プラグインが見つからないんです!
3=FFXIV プラグインを見つかりました!
4=FFXIV ドユーティー・コンテンツ: {0}
5=ACT 情報: {0} ({1})
6=FFXIV プラグイン情報: {0} ({1})
5=ACT 情報: {0}
6=FFXIV プラグイン情報: {0}
7=データが壊れました: {0}
8=分析できません!
9=アンノウン・コンテンツ: {0}
@ -16,7 +16,7 @@ LANG=日本語
12=アンノウン・フェイト: {0}
13=データが読めないんです!
14=データ・ファイルが見つからないんです! {0}
20=ドユーティー・コンテンツ情報: {1}({0}) / A:{2} / R:{3} / I:{4} / F:{5} ({6})
20=ドユーティー・コンテンツ情報: {1}({0}) / A:{2} / R:{3} / I:{4} / F:{5}
21=ルーレット
22=インスタンス
23=フェイト
@ -25,13 +25,18 @@ LANG=日本語
26=基本
27=なし
28=パケット・データが見つからないんです! {0}
29=パケット情報: {0} "{1}" ({2})
29=パケット情報: {0} "{1}"
30=Webサービスにエラーが発生しました。
31=コンテンツ・データのアップデートが失敗しました。
32=パケット・データのアップデートが失敗しまし。
33=パケット・アップデート: {0} "{1}"
35=クリップボードエラーです!
36=ウィンドウ制御エラーです!
37=デバッグ
38=マッチング
39=待機
99=Duty Content プラグイン {0}
99=DutyContent プラグイン {0}
101=WAVEファイルを選んでください
102=WAVファイル (*.wav)|*.wav|全て (*.*)|*.*
@ -54,13 +59,13 @@ LANG=日本語
213=使用する
214=使用しない
215=※プラグイン再起動が必要です
216=ログフォント
300=コンテンツ
301=コンテンツ
302=設定
303=パゲット
304=データ
305=ログフォント
306=オーバレイ・オン
307=透明度
308=サウンド・オン
@ -82,15 +87,6 @@ LANG=日本語
324=状態
325=人数
326=進行度
327=ピン
328=ピン使用
329=速度色
330=ナイス
331=いい
332=ふつう
333=わるい
334=グラフ
335=クライアントの接触がない場合のDC選択
336=パケット
337=カストム・パケット
338=Discordのウェブフックお知らせ
@ -98,7 +94,26 @@ LANG=日本語
340=テスト&& お知らせ保存
341=TTS使用
342=正しいDiscordのウェブフックURLを入力してください
343=現在アドレス
400=ピン
401=ピン使用
402=速度色
403=ナイス
404=いい
405=ふつう
406=わるい
407=グラフ
408=クライアントの接触がない場合のDC選択
409=現在アドレス
410=グラフタイプ
411=線形
412=湾曲
413=損失率を示す
500=ログ
501=コピー
502=全て消す
503=自動的にスクロール
10001="{0}" 発生!
10002=待機: {0}

View file

@ -6,8 +6,8 @@ LANG=한국어(액토즈)
2=FFXIV 플러그인이 없어요!
3=FFXIV 플러그인을 찾았어요!
4=FFXIV 듀티 콘텐츠: {0}
5=ACT 정보: {0} ({1})
6=FFXIV 플러그인 정보: {0} ({1})
5=ACT 정보: {0}
6=FFXIV 플러그인 정보: {0}
7=잘못된 데이터: {0}
8=분석할 수 없어요
9=알수없는 임무: {0}
@ -16,7 +16,7 @@ LANG=한국어(액토즈)
12=알수없는 돌발: {0}
13=데이터를 읽을 수가 없어요!
14=데이터 파일이 없어요! {0}
20=듀티 콘텐츠 정보: {1}({0}) / A:{2} / R:{3} / I:{4} / F:{5} ({6})
20=듀티 콘텐츠 정보: {1}({0}) / A:{2} / R:{3} / I:{4} / F:{5}
21=무작위 임무
22=인스턴스
23=돌발
@ -25,11 +25,16 @@ LANG=한국어(액토즈)
26=기본
27=없음
28=패킷 파일이 없어요! {0}
29=패킷 정보: {0} "{1}" ({2})
29=패킷 정보: {0} "{1}"
30=웹 요청중 에러 발생
31=임무 데이터 업데이트중 에러 발생
32=패킷 데이터 업데이트중 에러 발생
33=패킷을 업데이트 했습니다: {0} "{1}"
35=클립보드를 사용할 수 없습니다!
36=윈도우 컨트롤에 오류가 있습니다!
37=디버그
38=매칭
39=찾습니다
99=듀티 콘텐츠 플러그인 {0}
@ -54,13 +59,13 @@ LANG=한국어(액토즈)
213=사용함
214=사용안함
215=※플러그인 재기동이 필요합니다
216=로그 글꼴
300=임무
301=콘텐츠
302=설정
303=패킷
304=데이터셋
305=로그 글꼴
306=오버레이 보기
307=투명도
308=소리 듣기
@ -82,15 +87,6 @@ LANG=한국어(액토즈)
324=상태
325=사람수
326=진행도
327=핑
328=핑 사용
329=속도별 색깔
330=매우 좋음
331=좋음
332=보통
333=나쁨
334=그래프 보기
335=클라이언트의 접속이 없을때 사용할 DC 선택
336=패킷
337=커스텀 패킷
338=디스코드 웹훅 알림
@ -98,7 +94,26 @@ LANG=한국어(액토즈)
340=테스트 && 알림설정 저장
341=말하기 사용
342=올바른 디스코드 웹훅 주소를 입력해주세요.
343=연결된 IP주소
400=핑
401=핑 사용
402=속도별 색깔
403=매우 좋음
404=좋음
405=보통
406=나쁨
407=그래프 보기
408=클라이언트의 접속이 없을때 사용할 DC 선택
409=연결된 IP주소
410=그래프 모양
411=선형
412=곡선
413=손실율 표시
500=로그
501=복사
502=모두 지우기
503=자동으로 스크롤
10001="{0}" 발생했어요!
10002=찾습니다: {0}

View file

@ -6,8 +6,8 @@ LANG=한국어
2=FFXIV 플러그인이 없어요!
3=FFXIV 플러그인을 찾았어요!
4=FFXIV 듀티 콘텐츠: {0}
5=ACT 정보: {0} ({1})
6=FFXIV 플러그인 정보: {0} ({1})
5=ACT 정보: {0}
6=FFXIV 플러그인 정보: {0}
7=잘못된 데이터: {0}
8=분석할 수 없어요
9=알수없는 듀티: {0}
@ -16,20 +16,25 @@ LANG=한국어
12=알수없는 페이트: {0}
13=데이터를 읽을 수가 없어요!
14=데이터 파일이 없어요! {0}
20=듀티 콘텐츠 정보: {1}({0}) / A:{2} / R:{3} / I:{4} / F:{5} ({6})
20=듀티 콘텐츠 정보: {1}({0}) / A:{2} / R:{3} / I:{4} / F:{5}
21=루렛
22=인스턴스
23=페이트
24=스커미시
25=크리티컬 인게이지먼트
25=인게이지먼트
26=기본
27=없음
28=패킷 파일이 없어요! {0}
29=패킷 정보: {0} "{1}" ({2})
29=패킷 정보: {0} "{1}"
30=웹 요청중 에러 발생
31=임무 데이터 업데이트중 에러 발생
32=패킷 데이터 업데이트중 에러 발생
33=새 패킷 업데이트: {0} "{1}"
35=클립보드를 사용할 수 없습니다!
36=윈도우 컨트롤에 오류가 있습니다!
37=디버그
38=매칭
39=찾아요
99=듀티 콘텐츠 플러그인 {0}
@ -54,13 +59,13 @@ LANG=한국어
213=보이기
214=감추기
215=※플러그인을 다시 실행해야합니다
216=로그 글꼴
300=듀티
301=콘텐츠
302=설정
303=패킷
304=데이터셋
305=로그 글꼴
306=오버레이 보기
307=투명도
308=소리 듣기
@ -82,15 +87,6 @@ LANG=한국어
324=상태
325=사람수
326=진행도
327=핑
328=핑 사용
329=속도별 색깔
330=매우 좋음
331=좋음
332=보통
333=나쁨
334=그래프 보기
335=클라이언트의 접속이 없을때 사용할 DC 선택
336=패킷
337=커스텀 패킷
338=디스코드 Webhook 알림
@ -98,7 +94,26 @@ LANG=한국어
340=테스트 && 알림설정 저장
341=TTS 사용
342=올바른 디스코드 Webhook을 입력해주세요.
343=현재 연결 IP
400=핑
401=핑 사용
402=속도별 색깔
403=매우 좋음
404=좋음
405=보통
406=나쁨
407=그래프 보기
408=클라이언트의 접속이 없을때 사용할 DC 선택
409=현재 연결 IP
410=그래프 모양
411=선형
412=곡선
413=손실율 표시
500=로그
501=복사
502=모두 지우기
503=자동으로 스크롤
10001="{0}" 떠스요!
10002=찾아요: {0}

View file

@ -12,7 +12,7 @@ namespace DutyContent
{
class DcConfig
{
public static int PluginTag => 14;
public static int PluginTag => 15;
public static Version PluginVersion => System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;
public static bool PluginEnable { get; set; }
@ -33,6 +33,7 @@ namespace DutyContent
public static int LastUpdatedPlugin { get; set; } = 0;
public static string UiFontFamily { get; set; } = "Microsoft Sans Serif";
public static bool StatusBar { get; set; } = false;
public static bool DebugEnable { get; set; } = false;
//
public static string BuildDataFileName(string header, string context, string ext)
@ -75,6 +76,7 @@ namespace DutyContent
sw.WriteLine("LastUpdatedPlugin={0}", LastUpdatedPlugin);
sw.WriteLine("UiFontFamily={0}", UiFontFamily);
sw.WriteLine("StatusBar={0}", StatusBar);
sw.WriteLine("DebugEnable={0}", DebugEnable);
sw.WriteLine();
Duty.InternalSaveStream(sw);
@ -97,6 +99,7 @@ namespace DutyContent
LastUpdatedPlugin = ThirdParty.Converter.ToInt(db["LastUpdatedPlugin"]);
UiFontFamily = db.Get("UiFontFamily", UiFontFamily);
StatusBar = ThirdParty.Converter.ToBool(db["StatusBar"], StatusBar);
DebugEnable = ThirdParty.Converter.ToBool(db["DebugEnable"], DebugEnable);
Duty.InternalReadFromDb(db);
}
@ -107,16 +110,16 @@ namespace DutyContent
if (string.IsNullOrWhiteSpace(Language))
{
if (!is_in_init)
MesgLog.Initialize(Properties.Resources.DefaultMessage);
Locale.Initialize(Properties.Resources.DefaultMessage);
}
else
{
string filename = BuildLangFileName(Language);
if (File.Exists(filename))
MesgLog.LoadFile(filename);
Locale.LoadFile(filename);
else
MesgLog.Initialize(Properties.Resources.DefaultMessage);
Locale.Initialize(Properties.Resources.DefaultMessage);
}
}
@ -139,7 +142,7 @@ namespace DutyContent
if (!File.Exists(filename))
{
MesgLog.E(27, " ");
Logger.E(27, " ");
return false;
}
}
@ -150,8 +153,7 @@ namespace DutyContent
// load. if file not exist, create new one with default value
Packet.Load(filename);
MesgLog.I(29, Packet.Version, Packet.Description, filename);
Logger.Write(Packet.GetInformation());
return true;
}
@ -160,13 +162,13 @@ namespace DutyContent
public class PacketConfig
{
// Packet
public long Version { get; set; } = 2005551;
public string Description { get; set; } = "5.55 HotFix";
public ushort OpFate { get; set; } = 858;
public ushort OpDuty { get; set; } = 271;
public ushort OpMatch { get; set; } = 220;
public ushort OpInstance { get; set; } = 923;
public ushort OpSouthernBozja { get; set; } = 584;
public long Version { get; set; } = 2005580;
public string Description { get; set; } = "5.58 (JP/NA/EU/OC)";
public ushort OpFate { get; set; } = 788;
public ushort OpDuty { get; set; } = 676;
public ushort OpMatch { get; set; } = 428;
public ushort OpInstance { get; set; } = 234;
public ushort OpCe { get; set; } = 269;
// packet version structure
// 0 - Service area (1:Custom, 2:Global, 3:Korea)
@ -197,7 +199,7 @@ namespace DutyContent
OpDuty = right.OpDuty;
OpMatch = right.OpMatch;
OpInstance = right.OpInstance;
OpSouthernBozja = right.OpSouthernBozja;
OpCe = right.OpCe;
}
else
{
@ -205,10 +207,22 @@ namespace DutyContent
OpDuty = 0;
OpMatch = 0;
OpInstance = 0;
OpSouthernBozja = 0;
OpCe = 0;
}
}
//
public string GetInformation()
{
return Locale.Text(29, Version, Description);
}
//
public override string ToString()
{
return GetInformation();
}
//
public bool Save(string filename)
{
@ -227,7 +241,7 @@ namespace DutyContent
sw.WriteLine("OpDuty={0}", OpDuty);
sw.WriteLine("OpMatch={0}", OpMatch);
sw.WriteLine("OpInstance={0}", OpInstance);
sw.WriteLine("OpSouthernBozja={0}", OpSouthernBozja);
sw.WriteLine("OpSouthernBozja={0}", OpCe);
sw.WriteLine();
}
@ -242,7 +256,7 @@ namespace DutyContent
OpDuty = ThirdParty.Converter.ToUshort(db["OpDuty"], OpDuty);
OpMatch = ThirdParty.Converter.ToUshort(db["OpMatch"], OpMatch);
OpInstance = ThirdParty.Converter.ToUshort(db["OpInstance"], OpInstance);
OpSouthernBozja = ThirdParty.Converter.ToUshort(db["OpSouthernBozja"], OpSouthernBozja);
OpCe = ThirdParty.Converter.ToUshort(db["OpSouthernBozja"], OpCe);
}
//
@ -302,7 +316,9 @@ namespace DutyContent
Color.FromArgb(0xFF, 0xDD, 0xA0, 0xDD),
};
public bool PingGraph { get; set; }
public bool PingShowLoss { get; set; }
public string PingDefAddr { get; set; }
public int PingGraphType { get; set; }
//
public bool EnableNotify => UseNotifyLine || UseNotifyTelegram || UseNotifyDiscordWebhook;
@ -356,8 +372,10 @@ namespace DutyContent
sw.WriteLine("DutyPingColor1={0:X}", PingColors[1].ToArgb());
sw.WriteLine("DutyPingColor2={0:X}", PingColors[2].ToArgb());
sw.WriteLine("DutyPingColor3={0:X}", PingColors[3].ToArgb());
sw.WriteLine("DutyPingShowLoss={0}", PingShowLoss);
sw.WriteLine("DutyPingGraph={0}", PingGraph);
sw.WriteLine("DutyPingDefAddr={0}", PingDefAddr);
sw.WriteLine("DutyPingGraphType={0}", PingGraphType);
sw.WriteLine();
}
@ -401,8 +419,10 @@ namespace DutyContent
PingColors[1] = ThirdParty.Converter.ToColorArgb(db["DutyPingColor1"], PingColors[1]);
PingColors[2] = ThirdParty.Converter.ToColorArgb(db["DutyPingColor2"], PingColors[2]);
PingColors[3] = ThirdParty.Converter.ToColorArgb(db["DutyPingColor3"], PingColors[3]);
PingShowLoss = ThirdParty.Converter.ToBool(db["DutyPingShowLoss"]);
PingGraph = ThirdParty.Converter.ToBool(db["DutyPingGraph"]);
PingDefAddr = db.Get("DutyPingDefAddr", string.Empty);
PingGraphType = ThirdParty.Converter.ToInt(db["PingGraphType"]);
}
}
@ -440,19 +460,24 @@ namespace DutyContent
//
public class ConnectionList
{
public List<ThirdParty.NativeMethods.TcpRow> Conns = new List<ThirdParty.NativeMethods.TcpRow>();
public SortedSet<ThirdParty.NativeMethods.TcpRow> Conns = new SortedSet<ThirdParty.NativeMethods.TcpRow>();
public int Count => Conns.Count;
public ThirdParty.NativeMethods.TcpRow[] CopyConnection()
{
ThirdParty.NativeMethods.TcpRow[] ret;
lock (Conns)
ret = Conns.ToArray();
{
ret = new ThirdParty.NativeMethods.TcpRow[Conns.Count];
Conns.CopyTo(ret);
}
return ret;
}
public void GetConnections(Process process)
public void BuildConnections(Process process)
{
var size = 0;
ThirdParty.NativeMethods.GetExtendedTcpTable(IntPtr.Zero, ref size, true, AddressFamily.InterNetwork, 4);

View file

@ -72,6 +72,18 @@ namespace DutyContent
public static IReadOnlyDictionary<int, Fate> Fates { get; private set; } = new Dictionary<int, Fate>();
public static Dictionary<int, int> Missions { get; private set; } = new Dictionary<int, int>();
//
public static string GetInformation()
{
return Locale.Text(20,
Language,
Version,
Areas.Count,
Roulettes.Count,
Instances.Count,
Fates.Count);
}
//
public static bool Initialize(string json)
{
@ -116,12 +128,12 @@ namespace DutyContent
}
catch (NullReferenceException /*nex*/)
{
MesgLog.E(7, fate.Key);
Logger.E(7, fate.Key);
return false;
}
catch (Exception ex)
{
MesgLog.Ex(ex, 8);
Logger.Ex(ex, 8);
return false;
}
}
@ -167,28 +179,28 @@ namespace DutyContent
public static Roulette GetRoulette(int code)
{
return Roulettes.TryGetValue(code, out Roulette roulette) ? roulette :
new Roulette { Name = MesgLog.Text(9, code) };
new Roulette { Name = Locale.Text(9, code) };
}
//
public static Instance GetInstance(int code)
{
return Instances.TryGetValue(code, out Instance instance) ? instance :
new Instance { Name = MesgLog.Text(10, code) };
new Instance { Name = Locale.Text(10, code) };
}
//
public static Area GetArea(int code)
{
return Areas.TryGetValue(code, out Area area) ? area :
new Area { Name = MesgLog.Text(11, code) };
new Area { Name = Locale.Text(11, code) };
}
//
public static Fate GetFate(int code)
{
return Fates.ContainsKey(code) ? Fates[code] :
new Fate { Name = MesgLog.Text(12, code) };
new Fate { Name = Locale.Text(12, code) };
}
//
@ -207,7 +219,7 @@ namespace DutyContent
if (!File.Exists(filename))
{
MesgLog.E(14, filename);
Logger.E(14, filename);
return false;
}
@ -217,22 +229,15 @@ namespace DutyContent
string json = File.ReadAllText(filename, Encoding.UTF8);
if (!Initialize(json))
if (Initialize(json))
{
MesgLog.E(13);
return false;
Logger.Write(GetInformation());
return true;
}
else
{
MesgLog.I(20,
Language,
Version,
Areas.Count,
Roulettes.Count,
Instances.Count,
Fates.Count,
filename);
return true;
Logger.E(13);
return false;
}
}
@ -241,11 +246,11 @@ namespace DutyContent
// 10[1] status 0=end, 1=wait, 2=??, 3=progress
switch (s)
{
case 0: return MesgLog.Text(10017);
case 1: return MesgLog.Text(10018);
case 2: return MesgLog.Text(10019);
case 3: return MesgLog.Text(10020);
default: return MesgLog.Text(10021);
case 0: return Locale.Text(10017);
case 1: return Locale.Text(10018);
case 2: return Locale.Text(10019);
case 3: return Locale.Text(10020);
default: return Locale.Text(10021);
}
}

108
DcControl.Designer.cs generated
View file

@ -29,77 +29,67 @@ namespace DutyContent
/// </summary>
private void InitializeComponent()
{
this.spctBase = new System.Windows.Forms.SplitContainer();
this.tabMain = new System.Windows.Forms.TabControl();
this.tabPageLog = new System.Windows.Forms.TabPage();
this.tabPageDuty = new System.Windows.Forms.TabPage();
this.tabPagePing = new System.Windows.Forms.TabPage();
this.tabPageConfig = new System.Windows.Forms.TabPage();
this.txtMesg = new System.Windows.Forms.RichTextBox();
this.btnClearMesg = new System.Windows.Forms.Button();
this.panelBase = new System.Windows.Forms.Panel();
this.lblStatusLeft = new System.Windows.Forms.Label();
((System.ComponentModel.ISupportInitialize)(this.spctBase)).BeginInit();
this.spctBase.Panel1.SuspendLayout();
this.spctBase.Panel2.SuspendLayout();
this.spctBase.SuspendLayout();
this.tabMain.SuspendLayout();
this.panelBase.SuspendLayout();
this.SuspendLayout();
//
// spctBase
//
this.spctBase.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.spctBase.Location = new System.Drawing.Point(3, 3);
this.spctBase.Name = "spctBase";
this.spctBase.Orientation = System.Windows.Forms.Orientation.Horizontal;
//
// spctBase.Panel1
//
this.spctBase.Panel1.Controls.Add(this.tabMain);
//
// spctBase.Panel2
//
this.spctBase.Panel2.Controls.Add(this.txtMesg);
this.spctBase.Panel2.Controls.Add(this.btnClearMesg);
this.spctBase.Size = new System.Drawing.Size(786, 534);
this.spctBase.SplitterDistance = 467;
this.spctBase.TabIndex = 0;
//
// tabMain
//
this.tabMain.Alignment = System.Windows.Forms.TabAlignment.Left;
this.tabMain.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.tabMain.Controls.Add(this.tabPageLog);
this.tabMain.Controls.Add(this.tabPageDuty);
this.tabMain.Controls.Add(this.tabPagePing);
this.tabMain.Controls.Add(this.tabPageConfig);
this.tabMain.Dock = System.Windows.Forms.DockStyle.Fill;
this.tabMain.DrawMode = System.Windows.Forms.TabDrawMode.OwnerDrawFixed;
this.tabMain.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.tabMain.ItemSize = new System.Drawing.Size(30, 100);
this.tabMain.Location = new System.Drawing.Point(0, 0);
this.tabMain.Margin = new System.Windows.Forms.Padding(4);
this.tabMain.Multiline = true;
this.tabMain.Name = "tabMain";
this.tabMain.SelectedIndex = 0;
this.tabMain.Size = new System.Drawing.Size(786, 467);
this.tabMain.Size = new System.Drawing.Size(820, 465);
this.tabMain.SizeMode = System.Windows.Forms.TabSizeMode.Fixed;
this.tabMain.TabIndex = 0;
this.tabMain.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.TabMain_DrawItem);
//
// tabPageLog
//
this.tabPageLog.Location = new System.Drawing.Point(104, 4);
this.tabPageLog.Margin = new System.Windows.Forms.Padding(4);
this.tabPageLog.Name = "tabPageLog";
this.tabPageLog.Size = new System.Drawing.Size(712, 457);
this.tabPageLog.TabIndex = 3;
this.tabPageLog.Text = "Log";
this.tabPageLog.UseVisualStyleBackColor = true;
//
// tabPageDuty
//
this.tabPageDuty.BackColor = System.Drawing.Color.Transparent;
this.tabPageDuty.Location = new System.Drawing.Point(104, 4);
this.tabPageDuty.Margin = new System.Windows.Forms.Padding(4);
this.tabPageDuty.Name = "tabPageDuty";
this.tabPageDuty.Padding = new System.Windows.Forms.Padding(3);
this.tabPageDuty.Size = new System.Drawing.Size(678, 459);
this.tabPageDuty.Padding = new System.Windows.Forms.Padding(4);
this.tabPageDuty.Size = new System.Drawing.Size(712, 441);
this.tabPageDuty.TabIndex = 0;
this.tabPageDuty.Text = "Duty";
//
// tabPagePing
//
this.tabPagePing.Location = new System.Drawing.Point(104, 4);
this.tabPagePing.Margin = new System.Windows.Forms.Padding(4);
this.tabPagePing.Name = "tabPagePing";
this.tabPagePing.Size = new System.Drawing.Size(678, 459);
this.tabPagePing.Size = new System.Drawing.Size(712, 441);
this.tabPagePing.TabIndex = 2;
this.tabPagePing.Text = "Ping";
this.tabPagePing.UseVisualStyleBackColor = true;
@ -107,43 +97,23 @@ namespace DutyContent
// tabPageConfig
//
this.tabPageConfig.Location = new System.Drawing.Point(104, 4);
this.tabPageConfig.Margin = new System.Windows.Forms.Padding(4);
this.tabPageConfig.Name = "tabPageConfig";
this.tabPageConfig.Padding = new System.Windows.Forms.Padding(3);
this.tabPageConfig.Size = new System.Drawing.Size(678, 459);
this.tabPageConfig.Padding = new System.Windows.Forms.Padding(4);
this.tabPageConfig.Size = new System.Drawing.Size(712, 441);
this.tabPageConfig.TabIndex = 1;
this.tabPageConfig.Text = "Config";
this.tabPageConfig.UseVisualStyleBackColor = true;
//
// txtMesg
//
this.txtMesg.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.txtMesg.Location = new System.Drawing.Point(104, 3);
this.txtMesg.Name = "txtMesg";
this.txtMesg.ReadOnly = true;
this.txtMesg.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.Vertical;
this.txtMesg.Size = new System.Drawing.Size(679, 57);
this.txtMesg.TabIndex = 1;
this.txtMesg.Text = "";
//
// btnClearMesg
//
this.btnClearMesg.Location = new System.Drawing.Point(3, 3);
this.btnClearMesg.Name = "btnClearMesg";
this.btnClearMesg.Size = new System.Drawing.Size(95, 33);
this.btnClearMesg.TabIndex = 0;
this.btnClearMesg.Text = "Clear Mesg";
this.btnClearMesg.UseVisualStyleBackColor = true;
//
// panelBase
//
this.panelBase.Controls.Add(this.tabMain);
this.panelBase.Controls.Add(this.lblStatusLeft);
this.panelBase.Controls.Add(this.spctBase);
this.panelBase.Dock = System.Windows.Forms.DockStyle.Fill;
this.panelBase.Location = new System.Drawing.Point(0, 0);
this.panelBase.Margin = new System.Windows.Forms.Padding(4);
this.panelBase.Name = "panelBase";
this.panelBase.Size = new System.Drawing.Size(792, 567);
this.panelBase.Size = new System.Drawing.Size(820, 490);
this.panelBase.TabIndex = 1;
//
// lblStatusLeft
@ -153,9 +123,10 @@ namespace DutyContent
this.lblStatusLeft.BackColor = System.Drawing.Color.MidnightBlue;
this.lblStatusLeft.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblStatusLeft.ForeColor = System.Drawing.Color.White;
this.lblStatusLeft.Location = new System.Drawing.Point(0, 540);
this.lblStatusLeft.Location = new System.Drawing.Point(0, 462);
this.lblStatusLeft.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lblStatusLeft.Name = "lblStatusLeft";
this.lblStatusLeft.Size = new System.Drawing.Size(792, 27);
this.lblStatusLeft.Size = new System.Drawing.Size(820, 28);
this.lblStatusLeft.TabIndex = 1;
this.lblStatusLeft.Text = "99";
this.lblStatusLeft.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
@ -163,15 +134,13 @@ namespace DutyContent
//
// DcControl
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 18F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.panelBase);
this.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.Margin = new System.Windows.Forms.Padding(4);
this.Name = "DcControl";
this.Size = new System.Drawing.Size(792, 567);
this.spctBase.Panel1.ResumeLayout(false);
this.spctBase.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.spctBase)).EndInit();
this.spctBase.ResumeLayout(false);
this.Size = new System.Drawing.Size(820, 490);
this.tabMain.ResumeLayout(false);
this.panelBase.ResumeLayout(false);
this.ResumeLayout(false);
@ -179,15 +148,12 @@ namespace DutyContent
}
#endregion
private System.Windows.Forms.SplitContainer spctBase;
private System.Windows.Forms.Button btnClearMesg;
private System.Windows.Forms.TabControl tabMain;
private System.Windows.Forms.TabPage tabPageDuty;
private System.Windows.Forms.TabPage tabPageConfig;
private System.Windows.Forms.RichTextBox txtMesg;
private System.Windows.Forms.TabPage tabPagePing;
private System.Windows.Forms.Panel panelBase;
private System.Windows.Forms.Label lblStatusLeft;
private System.Windows.Forms.TabPage tabPageLog;
}
}

View file

@ -65,6 +65,9 @@ namespace DutyContent
Tab.ConfigForm configform = new Tab.ConfigForm();
tabPageConfig.Controls.Add(configform.Controls[0]);
Tab.LogForm logform = new Tab.LogForm();
tabPageLog.Controls.Add(logform.Controls[0]);
}
//
@ -89,7 +92,7 @@ namespace DutyContent
ActGlobals.oFormActMain.Shown += OFormActMain_Shown;
var actinfo = System.Reflection.Assembly.GetAssembly(typeof(ActGlobals));
MesgLog.I(5, actinfo.GetName().Version, actinfo.Location);
Logger.I(5, actinfo.GetName().Version);
if (_ffxiv_plugin_data == null)
{
@ -101,7 +104,7 @@ namespace DutyContent
}
if (_ffxiv_plugin_data == null)
MesgLog.E(2); // FFXIV plugin is missing!
Logger.E(2); // FFXIV plugin is missing!
else
{
var ids = ((FFXIV_ACT_Plugin.FFXIV_ACT_Plugin)_ffxiv_plugin_data.pluginObj).DataSubscription;
@ -110,7 +113,7 @@ namespace DutyContent
ids.ZoneChanged -= FFXIVPlugin_ZoneChanged;
ids.ZoneChanged += FFXIVPlugin_ZoneChanged;
MesgLog.I(6, System.Diagnostics.FileVersionInfo.GetVersionInfo(_ffxiv_plugin_data.pluginFile.FullName).FileVersion, _ffxiv_plugin_data.pluginFile.FullName);
Logger.I(6, System.Diagnostics.FileVersionInfo.GetVersionInfo(_ffxiv_plugin_data.pluginFile.FullName).FileVersion);
}
_save_timer = new System.Timers.Timer() { Interval = 5000 };
@ -142,10 +145,9 @@ namespace DutyContent
Tab.PingForm.Self?.PluginDeinitialize();
Tab.DutyForm.Self?.PluginDeinitialize();
Tab.ConfigForm.Self?.PluginDeinitialize();
Tab.LogForm.Self?.PluginDeinitialize();
DcConfig.SaveConfig();
MesgLog.SetTextBox(null);
_act_tab = null;
if (_act_label != null)
@ -171,10 +173,9 @@ namespace DutyContent
_act_label.Text = "Starting...";
//
MesgLog.SetTextBox(txtMesg);
MesgLog.Initialize(Properties.Resources.DefaultMessage);
Locale.Initialize(Properties.Resources.DefaultMessage);
MesgLog.C(Color.Aquamarine, 4, DcConfig.PluginVersion.ToString());
Logger.I(4, DcConfig.PluginVersion.ToString());
DcConfig.LoadConfig();
ShowStatusBarAsConfig(true);
@ -185,17 +186,20 @@ namespace DutyContent
UpdateUiLocale();
lblStatusLeft.Text = MesgLog.Text(99, DcConfig.PluginVersion); // once here
lblStatusLeft.Text = Locale.Text(99, DcConfig.PluginVersion); // once here
//
Dock = DockStyle.Fill;
_act_tab.Controls.Add(this);
//
Tab.LogForm.Self?.PluginInitialize();
Tab.ConfigForm.Self?.PluginInitialize();
Tab.DutyForm.Self?.PluginInitialize();
Tab.PingForm.Self?.PluginInitialize();
tabMain.SelectedTab = tabPageDuty;
//
if (DcConfig.DataRemoteUpdate)
{
@ -206,7 +210,7 @@ namespace DutyContent
frm.PluginInitialize();
frm.UpdateUiLocale();
TabPage tp = new TabPage(MesgLog.Text(206));
TabPage tp = new TabPage(Locale.Text(206));
try
{
// why? sometimes trouble
@ -214,7 +218,7 @@ namespace DutyContent
}
catch (Exception ex)
{
MesgLog.Ex(ex);
Logger.Ex(ex);
}
tabMain.TabPages.Add(tp);
@ -227,7 +231,7 @@ namespace DutyContent
DcConfig.SaveConfig();
}
MesgLog.C(Color.Aquamarine, 207, DcConfig.PluginTag, tag);
Logger.C(Color.Aquamarine, 207, DcConfig.PluginTag, tag);
}
}
@ -254,7 +258,7 @@ namespace DutyContent
if (tabMain.SelectedIndex == e.Index)
{
f = new Font(tabMain.Font.FontFamily, 12.0f, FontStyle.Bold, GraphicsUnit.Pixel);
f = new Font(tabMain.Font.FontFamily, 14.0f, FontStyle.Bold, GraphicsUnit.Pixel);
#if false
b = new SolidBrush(Color.Black);
h = SystemBrushes.Window;
@ -266,7 +270,7 @@ namespace DutyContent
//else if (p.col)
else
{
f = new Font(tabMain.Font.FontFamily, 12.0f, FontStyle.Regular, GraphicsUnit.Pixel);
f = new Font(tabMain.Font.FontFamily, 14.0f, FontStyle.Regular, GraphicsUnit.Pixel);
b = new SolidBrush(Color.DarkSlateGray);
h = SystemBrushes.Control;
}
@ -320,7 +324,7 @@ namespace DutyContent
if (span.TotalSeconds > 2)
{
_game_connection_tick = now;
DcConfig.Connections.GetConnections(_game_process.Process);
DcConfig.Connections.BuildConnections(_game_process.Process);
}
}
@ -353,7 +357,7 @@ namespace DutyContent
{
Tab.DutyForm.Self?.ZoneChanged(zone_id, zone_name);
lblStatusLeft.Text = MesgLog.Text(34, zone_name, zone_id);
lblStatusLeft.Text = Locale.Text(34, zone_name, zone_id);
}
//
@ -361,18 +365,21 @@ namespace DutyContent
{
ThirdParty.FontUtilities.SimpleChangeFont(this, DcConfig.UiFontFamily, true);
_act_label.Text = MesgLog.Text(1); // Duty ready
_act_tab.Text = MesgLog.Text(0); // FFXIV dc
_act_label.Text = Locale.Text(1); // Duty ready
_act_tab.Text = Locale.Text(0); // FFXIV dc
tabPageDuty.Text = MesgLog.Text(300);
tabPageDuty.Text = Locale.Text(300);
Tab.DutyForm.Self?.UpdateUiLocale();
tabPagePing.Text = MesgLog.Text(327);
tabPagePing.Text = Locale.Text(400);
Tab.PingForm.Self?.UpdateUiLocale();
tabPageConfig.Text = MesgLog.Text(200);
tabPageConfig.Text = Locale.Text(200);
Tab.ConfigForm.Self?.UpdateUiLocale();
tabPageLog.Text = Locale.Text(500);
Tab.LogForm.Self?.UpdateUiLocale();
Tab.UpdateNotifyForm.Self?.UpdateUiLocale();
}
@ -383,7 +390,7 @@ namespace DutyContent
{
if (!lblStatusLeft.Visible || force)
{
spctBase.Dock = DockStyle.None;
tabMain.Dock = DockStyle.None;
lblStatusLeft.Visible = true;
}
}
@ -392,7 +399,7 @@ namespace DutyContent
if (lblStatusLeft.Visible || force)
{
lblStatusLeft.Visible = false;
spctBase.Dock = DockStyle.Fill;
tabMain.Dock = DockStyle.Fill;
}
}
}

View file

@ -73,6 +73,7 @@
<DependentUpon>DcControl.cs</DependentUpon>
</Compile>
<Compile Include="Libre\PingGrapher.cs" />
<Compile Include="Logger.cs" />
<Compile Include="Tab\ConfigForm.cs">
<SubType>Form</SubType>
</Compile>
@ -95,6 +96,12 @@
<Compile Include="Overlay\DutyOvForm.Designer.cs">
<DependentUpon>DutyOvForm.cs</DependentUpon>
</Compile>
<Compile Include="Tab\LogForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Tab\LogForm.Designer.cs">
<DependentUpon>LogForm.cs</DependentUpon>
</Compile>
<Compile Include="Tab\PingForm.cs">
<SubType>Form</SubType>
</Compile>
@ -108,16 +115,23 @@
<DependentUpon>UpdateNotifyForm.cs</DependentUpon>
</Compile>
<Compile Include="ThirdParty\Converter.cs" />
<Compile Include="ThirdParty\EXComboBox.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="ThirdParty\EXListView.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="ThirdParty\FontUtilities.cs" />
<Compile Include="ThirdParty\LineDb.cs" />
<Compile Include="ThirdParty\NativeMethods.cs" />
<Compile Include="ThirdParty\ThreadWorker.cs" />
<Compile Include="ThirdParty\WebApi.cs" />
<Compile Include="ThirdParty\WinFormSupp.cs" />
<Compile Include="Updater.cs" />
<Compile Include="WorkerAct.cs" />
</ItemGroup>
<ItemGroup>
<Compile Include="MesgLog.cs" />
<Compile Include="Locale.cs" />
<Compile Include="Properties\AssemblyInfo.cs">
<SubType>Code</SubType>
</Compile>
@ -147,6 +161,9 @@
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
<EmbeddedResource Include="Tab\LogForm.resx">
<DependentUpon>LogForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Tab\PingForm.resx">
<DependentUpon>PingForm.cs</DependentUpon>
</EmbeddedResource>
@ -159,7 +176,7 @@
<None Include="Data\DcDuty-Korean.json" />
<None Include="Data\DcPacket-Custom.config" />
<None Include="Data\DcPacket-Global.config" />
<None Include="Data\DcPacket-LocalChina.config" />
<None Include="Data\DcPacketReserved-LocalChina.config" />
<None Include="Data\DcPacket-LocalKorea.config" />
<None Include="packages.config" />
<None Include="Properties\Settings.settings">
@ -204,6 +221,18 @@
<ItemGroup>
<Resource Include="Data\DcLang-Korean%28Test%29.txt" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\pix_rdrt_green.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\pix_rdrt_red.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\pix_rdrt_puple.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\pix_rdrt_bline.png" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
<PostBuildEvent>if exist "%25APPDATA%25\Advanced Combat Tracker\Plugins\DutyContent" copy $(TargetPath) "%25APPDATA%25\Advanced Combat Tracker\Plugins\DutyContent" /y

View file

@ -89,7 +89,7 @@ namespace DutyContent.Libre
}
}
public void DrawValues(List<int> values)
public void DrawValues(List<int> values, DrawType drawtype = DrawType.Linear)
{
if (_bmp == null || values.Count < 2)
return;
@ -136,7 +136,10 @@ namespace DutyContent.Libre
for (var i = 0; i < cd.Count - 1; i++, u += Step)
pts[i] = new PointF(u, height - cd.Values[i] * scale);
g.DrawCurve(pen, pts, 0.6f);
if (drawtype == DrawType.Linear)
g.DrawLines(pen, pts);
else if (drawtype == DrawType.Curved)
g.DrawCurve(pen, pts, 0.6f);
}
#endif
}
@ -148,5 +151,12 @@ namespace DutyContent.Libre
_pbx.Image = _bmp;
_pbx.Refresh();
}
//
public enum DrawType : int
{
Linear = 0,
Curved = 1
}
}
}

52
Locale.cs Normal file
View file

@ -0,0 +1,52 @@
using System.Text;
namespace DutyContent
{
static class Locale
{
private static ThirdParty.LineDb _lines;
public static string Language { get; private set; }
public static void Initialize(string text)
{
_lines = new ThirdParty.LineDb(text, true);
}
public static bool LoadFile(string filename, Encoding enc)
{
if (_lines == null)
return false;
else
{
_lines.LoadFile(filename, enc, true);
return true;
}
}
public static bool LoadFile(string filename)
{
return LoadFile(filename, Encoding.UTF8);
}
public static string Text(string text)
{
return _lines == null || !_lines.Try(text, out string v) ? $"<{text}>" : v;
}
public static string Text(string text, params object[] prms)
{
return _lines == null || !_lines.Try(text, out string v) ? $"<{text}>" : string.Format(v, prms);
}
public static string Text(int key)
{
return _lines == null || !_lines.Try(key, out string v) ? $"<{key}>" : v;
}
public static string Text(int key, params object[] prms)
{
return _lines == null || !_lines.Try(key, out string v) ? $"<{key}>" : string.Format(v, prms);
}
}
}

77
Logger.cs Normal file
View file

@ -0,0 +1,77 @@
using System;
using System.Drawing;
using System.Text.RegularExpressions;
namespace DutyContent
{
static class Logger
{
private static readonly Regex ExceptionPattern = new Regex(@"\{(.+?)\}");
public static void Write(Color color, string fmt, params object[] prms)
{
if (Tab.LogForm.Self != null)
Tab.LogForm.Self.WriteLog(color, string.Format(fmt, prms));
}
public static void Write(string format, params object[] prms)
{
Write(Color.Black, format, prms);
}
public static void WriteCategory(Color color, string category, string fmt, params object[] prms)
{
if (Tab.LogForm.Self != null)
Tab.LogForm.Self.WriteLogSection(color, category, string.Format(fmt, prms));
}
public static void WriteCategory(string category, string format, params object[] prms)
{
Write(Color.Black, category, format, prms);
}
public static void L(string format, params object[] prms)
{
Write(Color.DarkBlue, format, prms);
}
// color
public static void C(Color color, int key, params object[] prms)
{
Write(color, Locale.Text(key, prms));
}
// info / black
public static void I(int key, params object[] prms)
{
Write(Color.Black, Locale.Text(key, prms));
}
// error / red
public static void E(int key, params object[] prms)
{
Write(Color.Red, Locale.Text(key, prms));
}
// gray
public static void Y(int key, params object[] prms)
{
Write(Color.Gray, Locale.Text(key, prms));
}
// exception
public static void Ex(Exception ex, int key, params object[] prms)
{
string text = Locale.Text(key, prms);
string msg = ExceptionPattern.Replace(ex.Message, "{{$1}}");
Write(Color.Red, $"{text}: {msg}");
}
// exception
public static void Ex(Exception ex)
{
string msg = ExceptionPattern.Replace(ex.Message, "{{$1}}");
Write(Color.Red, $"EX: {msg}");
}
}
}

View file

@ -1,134 +0,0 @@
using System;
using System.Drawing;
using System.Text;
using System.Text.RegularExpressions;
using System.Windows.Forms;
namespace DutyContent
{
class MesgLog
{
private static ThirdParty.LineDb _lines;
private static RichTextBox _logs;
private static readonly Regex ExceptionPattern = new Regex(@"\{(.+?)\}");
public static string Language { get; private set; }
public static void Initialize(string text)
{
_lines = new ThirdParty.LineDb(text, true);
}
public static bool LoadFile(string filename, Encoding enc)
{
if (_lines == null)
return false;
else
{
_lines.LoadFile(filename, enc, true);
return true;
}
}
public static bool LoadFile(string filename)
{
return LoadFile(filename, Encoding.UTF8);
}
public static void SetTextBox(RichTextBox textbox)
{
_logs = textbox;
}
public static string Text(string text)
{
return _lines == null || !_lines.Try(text, out string v) ? $"<{text}>" : v;
}
public static string Text(string text, params object[] prms)
{
return _lines == null || !_lines.Try(text, out string v) ? $"<{text}>" : string.Format(v, prms);
}
public static string Text(int key)
{
return _lines == null || !_lines.Try(key, out string v) ? $"<{key}>" : v;
}
public static string Text(int key, params object[] prms)
{
return _lines == null || !_lines.Try(key, out string v) ? $"<{key}>" : string.Format(v, prms);
}
public static void Write(Color color, string format, params object[] prms)
{
if (_logs == null || _logs.IsDisposed || format == null)
return;
var text = string.Format(format, prms);
var dt = DateTime.Now.ToString("HH:mm:ss");
var ms = $"[{dt}] {text}{Environment.NewLine}";
WorkerAct.Invoker(() =>
{
_logs.SelectionColor = color;
_logs.SelectionStart = _logs.TextLength;
_logs.SelectionLength = 0;
_logs.AppendText(ms);
_logs.SelectionColor = _logs.ForeColor;
ThirdParty.NativeMethods.ScrollToBottom(_logs);
});
}
public static void Write(string format, params object[] prms)
{
Write(Color.White, format, prms);
}
public static void L(string format, params object[] prms)
{
Write(Color.DarkBlue, format, prms);
}
// color
public static void C(Color color, int key, params object[] prms)
{
Write(color, Text(key, prms));
}
// info / black
public static void I(int key, params object[] prms)
{
Write(Color.Black, Text(key, prms));
}
// error / red
public static void E(int key, params object[] prms)
{
Write(Color.Red, Text(key, prms));
}
// gray
public static void Y(int key, params object[] prms)
{
Write(Color.Gray, Text(key, prms));
}
// exception
public static void Ex(Exception ex, int key, params object[] prms)
{
string text = Text(key, prms);
string msg = ExceptionPattern.Replace(ex.Message, "{{$1}}");
Write(Color.Red, $"{text}: {msg}");
}
// exception
public static void Ex(Exception ex)
{
string msg = ExceptionPattern.Replace(ex.Message, "{{$1}}");
Write(Color.Red, $"EX: {msg}");
}
}
}

View file

@ -53,5 +53,5 @@ using System.Windows;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyVersion("1.1.*")]
[assembly: AssemblyFileVersion("1.1.0.0")]

View file

@ -61,16 +61,16 @@ namespace DutyContent.Properties {
}
/// <summary>
/// # Default English message
/// Looks up a localized string similar to # Default English message
///LANG=English
///
///0=FFXIV dc
///0=DutyCon
///1=Duty ready
///2=FFXIV plugin is missing!
///3=FFXIV plugin found!
///4=FFXIV Duty Content starting!
///5=ACT info: {0} ({1})
///6=FFXIV plugin info {0} ({1})
///4=FFXIV Duty Content: {0}
///5=ACT info: {0}
///6=FFXIV plugin info: {0}
///7=Invalid data: {0}
///8=Parsing error
///9=Unknown roulette: {0}
@ -79,12 +79,14 @@ namespace DutyContent.Properties {
///12=Unknown FATE: {0}
///13=Data reading failed!
///14=Data file not found! {0}
///20=Duty contents info: {1}({0}) / A:{2} / R:{3} / I:{4} / F:{5} ({6})
///20=Duty contents info: {1}({0}) / A:{2} / R:{3} / I:{4} / F:{5}
///21=Roulette
///22=Instance
///23=FATE
///24=Skirmish
/// Looks up a localized string similar to this is city life
///25=CE
///26=Default
///27=N [rest of string was truncated]&quot;;.
/// </summary>
internal static string DefaultMessage {
get {
@ -122,6 +124,46 @@ namespace DutyContent.Properties {
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap pix_rdrt_bline {
get {
object obj = ResourceManager.GetObject("pix_rdrt_bline", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap pix_rdrt_green {
get {
object obj = ResourceManager.GetObject("pix_rdrt_green", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap pix_rdrt_puple {
get {
object obj = ResourceManager.GetObject("pix_rdrt_puple", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap pix_rdrt_red {
get {
object obj = ResourceManager.GetObject("pix_rdrt_red", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>

View file

@ -130,6 +130,18 @@
<data name="pix_play" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\pix_play.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="pix_rdrt_bline" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\pix_rdrt_bline.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="pix_rdrt_green" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\pix_rdrt_green.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="pix_rdrt_puple" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\pix_rdrt_puple.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="pix_rdrt_red" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\pix_rdrt_red.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="pix_tab_content" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\resources\pix_tab_content.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>

Binary file not shown.

View file

@ -6,8 +6,8 @@ LANG=English
2=FFXIV plugin is missing!
3=FFXIV plugin found!
4=FFXIV Duty Content: {0}
5=ACT info: {0} ({1})
6=FFXIV plugin info: {0} ({1})
5=ACT info: {0}
6=FFXIV plugin info: {0}
7=Invalid data: {0}
8=Parsing error
9=Unknown roulette: {0}
@ -16,7 +16,7 @@ LANG=English
12=Unknown FATE: {0}
13=Data reading failed!
14=Data file not found! {0}
20=Duty contents info: {1}({0}) / A:{2} / R:{3} / I:{4} / F:{5} ({6})
20=Duty contents info: {1}({0}) / A:{2} / R:{3} / I:{4} / F:{5}
21=Roulette
22=Instance
23=FATE
@ -25,12 +25,17 @@ LANG=English
26=Default
27=None
28=Packet file not found! {0}
29=Packet info: {0} "{1}" ({2})
29=Packet info: {0} "{1}"
30=Error requesting web service
31=Error while updating duty/FATE Data
32=Error while updating packet info
33=Packet updated: {0} "{1}"
34={0} ({1})
35=Access clipboard failed!
36=Window control error!
37=Debug
38=Match
39=Entry
99=DutyContent Plugin {0}
@ -54,14 +59,14 @@ LANG=English
212=Status bar
213=Enable
214=Disable
215=* Need restart plugin
215=* Need plugin reload
216=Log font
300=Duty
301=Contents
302=Setting
303=Packet
304=Dataset
305=Log font
306=Enable overlay
307=Transparent
308=Enable sound
@ -83,15 +88,6 @@ LANG=English
324=Status
325=Member
326=Progress
327=Ping
328=Use ping
329=Colors
330=Excellent
331=Good
332=Normal
333=Bad
334=Show Graph
335=Addresses when client doesn't have connections
336=Packet
337=Custom Packet
338=Use Discord Webhook
@ -99,7 +95,26 @@ LANG=English
340=Test && Save Notifies
341=Use TTS
342=Invalid discord webhook URL
343=Address
400=Ping
401=Use ping
402=Colors
403=Excellent
404=Good
405=Normal
406=Bad
407=Show Graph
408=Default ping addresses
409=Address
410=Graph type
411=Linear
412=Curved
413=Show loss rate
500=Log
501=Copy
502=Clear
503=Scroll automatically
10001="{0}" spawned!
10002=Entry: {0}

Binary file not shown.

After

Width:  |  Height:  |  Size: 544 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 739 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 728 B

BIN
Resources/pix_rdrt_red.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 732 B

View file

@ -30,7 +30,14 @@ namespace DutyContent.Tab
private void InitializeComponent()
{
this.pnlBase = new System.Windows.Forms.Panel();
this.panel3 = new System.Windows.Forms.Panel();
this.rdoDebugDisable = new System.Windows.Forms.RadioButton();
this.rdoDebugEnable = new System.Windows.Forms.RadioButton();
this.lblUseDebug = new System.Windows.Forms.Label();
this.btnLogFont = new System.Windows.Forms.Button();
this.lblLogFont = new System.Windows.Forms.Label();
this.panel2 = new System.Windows.Forms.Panel();
this.lblStatusBarNeedRestart = new System.Windows.Forms.Label();
this.rdoStatusBarEnable = new System.Windows.Forms.RadioButton();
this.rdoStatusBarDisable = new System.Windows.Forms.RadioButton();
this.panel1 = new System.Windows.Forms.Panel();
@ -45,8 +52,8 @@ namespace DutyContent.Tab
this.cboDispLang = new System.Windows.Forms.ComboBox();
this.lblDispLang = new System.Windows.Forms.Label();
this.panelBase = new System.Windows.Forms.Panel();
this.lblStatusBarNeedRestart = new System.Windows.Forms.Label();
this.pnlBase.SuspendLayout();
this.panel3.SuspendLayout();
this.panel2.SuspendLayout();
this.panel1.SuspendLayout();
this.panelBase.SuspendLayout();
@ -58,6 +65,11 @@ namespace DutyContent.Tab
| System.Windows.Forms.AnchorStyles.Right)));
this.pnlBase.AutoScroll = true;
this.pnlBase.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.pnlBase.Controls.Add(this.lblStatusBarNeedRestart);
this.pnlBase.Controls.Add(this.panel3);
this.pnlBase.Controls.Add(this.lblUseDebug);
this.pnlBase.Controls.Add(this.btnLogFont);
this.pnlBase.Controls.Add(this.lblLogFont);
this.pnlBase.Controls.Add(this.panel2);
this.pnlBase.Controls.Add(this.panel1);
this.pnlBase.Controls.Add(this.lblUseStatusBar);
@ -68,29 +80,112 @@ namespace DutyContent.Tab
this.pnlBase.Controls.Add(this.lblCurrentLang);
this.pnlBase.Controls.Add(this.cboDispLang);
this.pnlBase.Controls.Add(this.lblDispLang);
this.pnlBase.Location = new System.Drawing.Point(12, 12);
this.pnlBase.Location = new System.Drawing.Point(0, 0);
this.pnlBase.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.pnlBase.Name = "pnlBase";
this.pnlBase.Size = new System.Drawing.Size(776, 286);
this.pnlBase.Size = new System.Drawing.Size(804, 394);
this.pnlBase.TabIndex = 0;
//
// panel3
//
this.panel3.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.panel3.Controls.Add(this.rdoDebugDisable);
this.panel3.Controls.Add(this.rdoDebugEnable);
this.panel3.Location = new System.Drawing.Point(160, 352);
this.panel3.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.panel3.Name = "panel3";
this.panel3.Size = new System.Drawing.Size(627, 30);
this.panel3.TabIndex = 19;
//
// rdoDebugDisable
//
this.rdoDebugDisable.AutoSize = true;
this.rdoDebugDisable.Checked = true;
this.rdoDebugDisable.Location = new System.Drawing.Point(158, 4);
this.rdoDebugDisable.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.rdoDebugDisable.Name = "rdoDebugDisable";
this.rdoDebugDisable.Size = new System.Drawing.Size(50, 22);
this.rdoDebugDisable.TabIndex = 1;
this.rdoDebugDisable.TabStop = true;
this.rdoDebugDisable.Text = "214";
this.rdoDebugDisable.UseVisualStyleBackColor = true;
this.rdoDebugDisable.CheckedChanged += new System.EventHandler(this.rdoDebugDisable_CheckedChanged);
//
// rdoDebugEnable
//
this.rdoDebugEnable.AutoSize = true;
this.rdoDebugEnable.Location = new System.Drawing.Point(4, 4);
this.rdoDebugEnable.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.rdoDebugEnable.Name = "rdoDebugEnable";
this.rdoDebugEnable.Size = new System.Drawing.Size(50, 22);
this.rdoDebugEnable.TabIndex = 0;
this.rdoDebugEnable.Text = "213";
this.rdoDebugEnable.UseVisualStyleBackColor = true;
this.rdoDebugEnable.CheckedChanged += new System.EventHandler(this.rdoDebugEnable_CheckedChanged);
//
// lblUseDebug
//
this.lblUseDebug.AutoSize = true;
this.lblUseDebug.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblUseDebug.Location = new System.Drawing.Point(18, 357);
this.lblUseDebug.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lblUseDebug.Name = "lblUseDebug";
this.lblUseDebug.Size = new System.Drawing.Size(96, 20);
this.lblUseDebug.TabIndex = 18;
this.lblUseDebug.Text = "Use debug";
//
// btnLogFont
//
this.btnLogFont.Location = new System.Drawing.Point(160, 223);
this.btnLogFont.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.btnLogFont.Name = "btnLogFont";
this.btnLogFont.Size = new System.Drawing.Size(377, 53);
this.btnLogFont.TabIndex = 17;
this.btnLogFont.Text = "button1";
this.btnLogFont.UseVisualStyleBackColor = true;
this.btnLogFont.Click += new System.EventHandler(this.BtnLogFont_Click);
//
// lblLogFont
//
this.lblLogFont.AutoSize = true;
this.lblLogFont.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblLogFont.Location = new System.Drawing.Point(18, 239);
this.lblLogFont.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lblLogFont.Name = "lblLogFont";
this.lblLogFont.Size = new System.Drawing.Size(39, 20);
this.lblLogFont.TabIndex = 16;
this.lblLogFont.Text = "216";
//
// panel2
//
this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.panel2.Controls.Add(this.lblStatusBarNeedRestart);
this.panel2.Controls.Add(this.rdoStatusBarEnable);
this.panel2.Controls.Add(this.rdoStatusBarDisable);
this.panel2.Location = new System.Drawing.Point(251, 220);
this.panel2.Location = new System.Drawing.Point(160, 284);
this.panel2.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.panel2.Name = "panel2";
this.panel2.Size = new System.Drawing.Size(520, 47);
this.panel2.Size = new System.Drawing.Size(627, 50);
this.panel2.TabIndex = 15;
//
// lblStatusBarNeedRestart
//
this.lblStatusBarNeedRestart.AutoSize = true;
this.lblStatusBarNeedRestart.Location = new System.Drawing.Point(164, 314);
this.lblStatusBarNeedRestart.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lblStatusBarNeedRestart.Name = "lblStatusBarNeedRestart";
this.lblStatusBarNeedRestart.Size = new System.Drawing.Size(32, 18);
this.lblStatusBarNeedRestart.TabIndex = 14;
this.lblStatusBarNeedRestart.Text = "215";
//
// rdoStatusBarEnable
//
this.rdoStatusBarEnable.AutoSize = true;
this.rdoStatusBarEnable.Location = new System.Drawing.Point(2, 3);
this.rdoStatusBarEnable.Location = new System.Drawing.Point(3, 4);
this.rdoStatusBarEnable.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.rdoStatusBarEnable.Name = "rdoStatusBarEnable";
this.rdoStatusBarEnable.Size = new System.Drawing.Size(43, 17);
this.rdoStatusBarEnable.Size = new System.Drawing.Size(50, 22);
this.rdoStatusBarEnable.TabIndex = 12;
this.rdoStatusBarEnable.Text = "213";
this.rdoStatusBarEnable.UseVisualStyleBackColor = true;
@ -100,9 +195,10 @@ namespace DutyContent.Tab
//
this.rdoStatusBarDisable.AutoSize = true;
this.rdoStatusBarDisable.Checked = true;
this.rdoStatusBarDisable.Location = new System.Drawing.Point(105, 3);
this.rdoStatusBarDisable.Location = new System.Drawing.Point(158, 4);
this.rdoStatusBarDisable.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.rdoStatusBarDisable.Name = "rdoStatusBarDisable";
this.rdoStatusBarDisable.Size = new System.Drawing.Size(43, 17);
this.rdoStatusBarDisable.Size = new System.Drawing.Size(50, 22);
this.rdoStatusBarDisable.TabIndex = 13;
this.rdoStatusBarDisable.TabStop = true;
this.rdoStatusBarDisable.Text = "214";
@ -115,17 +211,19 @@ namespace DutyContent.Tab
| System.Windows.Forms.AnchorStyles.Right)));
this.panel1.Controls.Add(this.rdoDataUpdateLocal);
this.panel1.Controls.Add(this.rdoDataUpdateRemote);
this.panel1.Location = new System.Drawing.Point(251, 83);
this.panel1.Location = new System.Drawing.Point(160, 89);
this.panel1.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(520, 67);
this.panel1.Size = new System.Drawing.Size(627, 65);
this.panel1.TabIndex = 14;
//
// rdoDataUpdateLocal
//
this.rdoDataUpdateLocal.AutoSize = true;
this.rdoDataUpdateLocal.Location = new System.Drawing.Point(3, 3);
this.rdoDataUpdateLocal.Location = new System.Drawing.Point(4, 4);
this.rdoDataUpdateLocal.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.rdoDataUpdateLocal.Name = "rdoDataUpdateLocal";
this.rdoDataUpdateLocal.Size = new System.Drawing.Size(43, 17);
this.rdoDataUpdateLocal.Size = new System.Drawing.Size(50, 22);
this.rdoDataUpdateLocal.TabIndex = 6;
this.rdoDataUpdateLocal.Text = "204";
this.rdoDataUpdateLocal.UseVisualStyleBackColor = true;
@ -135,9 +233,10 @@ namespace DutyContent.Tab
//
this.rdoDataUpdateRemote.AutoSize = true;
this.rdoDataUpdateRemote.Checked = true;
this.rdoDataUpdateRemote.Location = new System.Drawing.Point(3, 26);
this.rdoDataUpdateRemote.Location = new System.Drawing.Point(4, 36);
this.rdoDataUpdateRemote.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.rdoDataUpdateRemote.Name = "rdoDataUpdateRemote";
this.rdoDataUpdateRemote.Size = new System.Drawing.Size(43, 17);
this.rdoDataUpdateRemote.Size = new System.Drawing.Size(50, 22);
this.rdoDataUpdateRemote.TabIndex = 7;
this.rdoDataUpdateRemote.TabStop = true;
this.rdoDataUpdateRemote.Text = "205";
@ -148,7 +247,8 @@ namespace DutyContent.Tab
//
this.lblUseStatusBar.AutoSize = true;
this.lblUseStatusBar.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblUseStatusBar.Location = new System.Drawing.Point(12, 220);
this.lblUseStatusBar.Location = new System.Drawing.Point(18, 289);
this.lblUseStatusBar.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lblUseStatusBar.Name = "lblUseStatusBar";
this.lblUseStatusBar.Size = new System.Drawing.Size(39, 20);
this.lblUseStatusBar.TabIndex = 11;
@ -156,18 +256,21 @@ namespace DutyContent.Tab
//
// lblTag
//
this.lblTag.AutoSize = true;
this.lblTag.Location = new System.Drawing.Point(27, 4);
this.lblTag.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.lblTag.Location = new System.Drawing.Point(160, 8);
this.lblTag.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lblTag.Name = "lblTag";
this.lblTag.Size = new System.Drawing.Size(35, 13);
this.lblTag.Size = new System.Drawing.Size(636, 18);
this.lblTag.TabIndex = 10;
this.lblTag.Text = "label1";
this.lblTag.Text = "@@@";
this.lblTag.TextAlign = System.Drawing.ContentAlignment.TopRight;
//
// btnUiFont
//
this.btnUiFont.Location = new System.Drawing.Point(251, 165);
this.btnUiFont.Location = new System.Drawing.Point(160, 162);
this.btnUiFont.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.btnUiFont.Name = "btnUiFont";
this.btnUiFont.Size = new System.Drawing.Size(217, 38);
this.btnUiFont.Size = new System.Drawing.Size(377, 53);
this.btnUiFont.TabIndex = 9;
this.btnUiFont.Text = "button1";
this.btnUiFont.UseVisualStyleBackColor = true;
@ -177,7 +280,8 @@ namespace DutyContent.Tab
//
this.lblUiFont.AutoSize = true;
this.lblUiFont.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblUiFont.Location = new System.Drawing.Point(12, 165);
this.lblUiFont.Location = new System.Drawing.Point(18, 178);
this.lblUiFont.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lblUiFont.Name = "lblUiFont";
this.lblUiFont.Size = new System.Drawing.Size(39, 20);
this.lblUiFont.TabIndex = 8;
@ -187,7 +291,8 @@ namespace DutyContent.Tab
//
this.lblDataUpdate.AutoSize = true;
this.lblDataUpdate.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblDataUpdate.Location = new System.Drawing.Point(12, 84);
this.lblDataUpdate.Location = new System.Drawing.Point(18, 93);
this.lblDataUpdate.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lblDataUpdate.Name = "lblDataUpdate";
this.lblDataUpdate.Size = new System.Drawing.Size(39, 20);
this.lblDataUpdate.TabIndex = 5;
@ -195,20 +300,21 @@ namespace DutyContent.Tab
//
// lblCurrentLang
//
this.lblCurrentLang.Location = new System.Drawing.Point(318, 67);
this.lblCurrentLang.Location = new System.Drawing.Point(354, 60);
this.lblCurrentLang.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lblCurrentLang.Name = "lblCurrentLang";
this.lblCurrentLang.Size = new System.Drawing.Size(150, 15);
this.lblCurrentLang.Size = new System.Drawing.Size(225, 21);
this.lblCurrentLang.TabIndex = 4;
this.lblCurrentLang.Text = "--";
this.lblCurrentLang.TextAlign = System.Drawing.ContentAlignment.TopRight;
//
// cboDispLang
//
this.cboDispLang.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cboDispLang.FormattingEnabled = true;
this.cboDispLang.Location = new System.Drawing.Point(251, 43);
this.cboDispLang.Location = new System.Drawing.Point(160, 55);
this.cboDispLang.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.cboDispLang.Name = "cboDispLang";
this.cboDispLang.Size = new System.Drawing.Size(217, 21);
this.cboDispLang.Size = new System.Drawing.Size(186, 26);
this.cboDispLang.TabIndex = 1;
this.cboDispLang.SelectedIndexChanged += new System.EventHandler(this.CboDispLang_SelectedIndexChanged);
//
@ -216,7 +322,8 @@ namespace DutyContent.Tab
//
this.lblDispLang.AutoSize = true;
this.lblDispLang.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblDispLang.Location = new System.Drawing.Point(12, 41);
this.lblDispLang.Location = new System.Drawing.Point(18, 57);
this.lblDispLang.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lblDispLang.Name = "lblDispLang";
this.lblDispLang.Size = new System.Drawing.Size(39, 20);
this.lblDispLang.TabIndex = 0;
@ -228,30 +335,27 @@ namespace DutyContent.Tab
this.panelBase.Controls.Add(this.pnlBase);
this.panelBase.Dock = System.Windows.Forms.DockStyle.Fill;
this.panelBase.Location = new System.Drawing.Point(0, 0);
this.panelBase.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.panelBase.Name = "panelBase";
this.panelBase.Size = new System.Drawing.Size(800, 450);
this.panelBase.Size = new System.Drawing.Size(804, 623);
this.panelBase.TabIndex = 1;
//
// lblStatusBarNeedRestart
//
this.lblStatusBarNeedRestart.AutoSize = true;
this.lblStatusBarNeedRestart.Location = new System.Drawing.Point(238, 5);
this.lblStatusBarNeedRestart.Name = "lblStatusBarNeedRestart";
this.lblStatusBarNeedRestart.Size = new System.Drawing.Size(25, 13);
this.lblStatusBarNeedRestart.TabIndex = 14;
this.lblStatusBarNeedRestart.Text = "215";
//
// ConfigForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 18F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.AutoScroll = true;
this.ClientSize = new System.Drawing.Size(800, 450);
this.ClientSize = new System.Drawing.Size(804, 623);
this.Controls.Add(this.panelBase);
this.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.MinimumSize = new System.Drawing.Size(640, 0);
this.Name = "ConfigForm";
this.Text = "Config";
this.pnlBase.ResumeLayout(false);
this.pnlBase.PerformLayout();
this.panel3.ResumeLayout(false);
this.panel3.PerformLayout();
this.panel2.ResumeLayout(false);
this.panel2.PerformLayout();
this.panel1.ResumeLayout(false);
@ -280,5 +384,11 @@ namespace DutyContent.Tab
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.Label lblUseStatusBar;
private System.Windows.Forms.Label lblStatusBarNeedRestart;
private System.Windows.Forms.Button btnLogFont;
private System.Windows.Forms.Label lblLogFont;
private System.Windows.Forms.Panel panel3;
private System.Windows.Forms.RadioButton rdoDebugDisable;
private System.Windows.Forms.RadioButton rdoDebugEnable;
private System.Windows.Forms.Label lblUseDebug;
}
}

View file

@ -28,7 +28,7 @@ namespace DutyContent.Tab
public void PluginInitialize()
{
//
lblCurrentLang.Text = MesgLog.Text("LANG");
lblCurrentLang.Text = Locale.Text("LANG");
//
var lang = MakeConfigLangList();
@ -59,6 +59,10 @@ namespace DutyContent.Tab
//
rdoStatusBarEnable.Checked = DcConfig.StatusBar;
rdoStatusBarDisable.Checked = !DcConfig.StatusBar;
//
rdoDebugEnable.Checked = DcConfig.DebugEnable;
rdoDebugDisable.Checked = !DcConfig.DebugEnable;
}
public void RefreshLocale()
@ -68,28 +72,35 @@ namespace DutyContent.Tab
public void UpdateUiLocale()
{
lblDispLang.Text = MesgLog.Text(201);
lblDispLang.Text = Locale.Text(201);
lblDataUpdate.Text = MesgLog.Text(203);
rdoDataUpdateLocal.Text = MesgLog.Text(204);
rdoDataUpdateRemote.Text = MesgLog.Text(205);
lblDataUpdate.Text = Locale.Text(203);
rdoDataUpdateLocal.Text = Locale.Text(204);
rdoDataUpdateRemote.Text = Locale.Text(205);
lblUiFont.Text = MesgLog.Text(210);
lblUiFont.Text = Locale.Text(210);
btnUiFont.Text = DcConfig.UiFontFamily;
lblTag.Text = MesgLog.Text(211, DcConfig.PluginTag, DcConfig.PluginVersion);
lblLogFont.Text = Locale.Text(216);
btnLogFont.Text = $"{DcConfig.Duty.LogFontFamily}, {DcConfig.Duty.LogFontSize}";
lblUseStatusBar.Text = MesgLog.Text(212);
rdoStatusBarEnable.Text = MesgLog.Text(213);
rdoStatusBarDisable.Text = MesgLog.Text(214);
lblStatusBarNeedRestart.Text = MesgLog.Text(215);
lblTag.Text = Locale.Text(211, DcConfig.PluginTag, DcConfig.PluginVersion);
lblUseStatusBar.Text = Locale.Text(212);
rdoStatusBarEnable.Text = Locale.Text(213);
rdoStatusBarDisable.Text = Locale.Text(214);
lblStatusBarNeedRestart.Text = Locale.Text(215);
rdoDebugEnable.Text = Locale.Text(213);
rdoDebugDisable.Text = Locale.Text(214);
}
public static List<string> MakeConfigLangList()
{
List<string> lst = new List<string>();
lst.Add($"<{MesgLog.Text(26)}>");
lst.Add($"<{Locale.Text(26)}>");
DirectoryInfo di = new DirectoryInfo(DcConfig.DataPath);
@ -127,7 +138,7 @@ namespace DutyContent.Tab
DcControl.Self?.UpdateUiLocale();
DcConfig.SaveConfig();
lblCurrentLang.Text = MesgLog.Text("LANG");
lblCurrentLang.Text = Locale.Text("LANG");
}
private void InternalDataUpdate(bool value)
@ -181,6 +192,34 @@ namespace DutyContent.Tab
}
}
private void BtnLogFont_Click(object sender, EventArgs e)
{
Font ret = (Font)WorkerAct.Invoker(new WorkerAct.ObjectReturnerDelegate(() =>
{
FontDialog dg = new FontDialog
{
Font = Tab.LogForm.Self?.LogFont,
FontMustExist = true,
AllowVerticalFonts = false
};
return (dg.ShowDialog() == DialogResult.OK) ? dg.Font : null;
}));
if (ret != null)
{
if (LogForm.Self != null)
LogForm.Self.LogFont = ret;
DcConfig.Duty.LogFontFamily = ret.Name;
DcConfig.Duty.LogFontSize = ret.Size;
DcConfig.SaveConfig();
btnLogFont.Font = ret;
btnLogFont.Text = $"{DcConfig.Duty.LogFontFamily}, {DcConfig.Duty.LogFontSize}";
}
}
private void InternalStatusBar(bool value)
{
if (!DcConfig.PluginEnable)
@ -206,5 +245,29 @@ namespace DutyContent.Tab
{
InternalStatusBar(false);
}
private void InternalDebug(bool value)
{
if (!DcConfig.PluginEnable)
return;
if (value && DcConfig.DebugEnable)
return;
if (!value && !DcConfig.DebugEnable)
return;
DcConfig.DebugEnable = value;
DcConfig.SaveConfig();
}
private void rdoDebugEnable_CheckedChanged(object sender, EventArgs e)
{
InternalDebug(true);
}
private void rdoDebugDisable_CheckedChanged(object sender, EventArgs e)
{
InternalDebug(false);
}
}
}

361
Tab/DutyForm.Designer.cs generated
View file

@ -51,7 +51,7 @@ namespace DutyContent.Tab
"",
""}, -1);
System.Windows.Forms.ListViewItem listViewItem5 = new System.Windows.Forms.ListViewItem(new string[] {
"Southern Bozja",
"Bozja",
"",
"",
""}, -1);
@ -59,13 +59,12 @@ namespace DutyContent.Tab
this.tabContent = new System.Windows.Forms.TabControl();
this.tabPageContent = new System.Windows.Forms.TabPage();
this.splitContainer1 = new System.Windows.Forms.SplitContainer();
this.chkShowDebug = new System.Windows.Forms.CheckBox();
this.rdoFatePreset4 = new System.Windows.Forms.RadioButton();
this.rdoFatePreset3 = new System.Windows.Forms.RadioButton();
this.rdoFatePreset2 = new System.Windows.Forms.RadioButton();
this.rdoFatePreset1 = new System.Windows.Forms.RadioButton();
this.treeFates = new System.Windows.Forms.TreeView();
this.txtContentLog = new System.Windows.Forms.RichTextBox();
this.lstContents = new DutyContent.ThirdParty.EXListView();
this.tabPageSetting = new System.Windows.Forms.TabPage();
this.panel4 = new System.Windows.Forms.Panel();
this.chkDiscowkTts = new System.Windows.Forms.CheckBox();
@ -88,8 +87,6 @@ namespace DutyContent.Tab
this.lblCurrentDataSet = new System.Windows.Forms.Label();
this.cboDataset = new System.Windows.Forms.ComboBox();
this.lblDataSet = new System.Windows.Forms.Label();
this.btnLogFont = new System.Windows.Forms.Button();
this.lblLogFont = new System.Windows.Forms.Label();
this.panel2 = new System.Windows.Forms.Panel();
this.btnSoundPlayFate = new System.Windows.Forms.Button();
this.btnSoundPlayInstance = new System.Windows.Forms.Button();
@ -150,9 +147,10 @@ namespace DutyContent.Tab
this.tabContent.Dock = System.Windows.Forms.DockStyle.Fill;
this.tabContent.ImageList = this.ilTabContent;
this.tabContent.Location = new System.Drawing.Point(0, 0);
this.tabContent.Margin = new System.Windows.Forms.Padding(4);
this.tabContent.Name = "tabContent";
this.tabContent.SelectedIndex = 0;
this.tabContent.Size = new System.Drawing.Size(800, 542);
this.tabContent.Size = new System.Drawing.Size(804, 561);
this.tabContent.TabIndex = 0;
//
// tabPageContent
@ -160,9 +158,10 @@ namespace DutyContent.Tab
this.tabPageContent.Controls.Add(this.splitContainer1);
this.tabPageContent.ImageIndex = 0;
this.tabPageContent.Location = new System.Drawing.Point(4, 39);
this.tabPageContent.Margin = new System.Windows.Forms.Padding(4);
this.tabPageContent.Name = "tabPageContent";
this.tabPageContent.Padding = new System.Windows.Forms.Padding(3);
this.tabPageContent.Size = new System.Drawing.Size(792, 499);
this.tabPageContent.Padding = new System.Windows.Forms.Padding(4);
this.tabPageContent.Size = new System.Drawing.Size(796, 518);
this.tabPageContent.TabIndex = 0;
this.tabPageContent.Text = "301";
this.tabPageContent.UseVisualStyleBackColor = true;
@ -170,12 +169,12 @@ namespace DutyContent.Tab
// splitContainer1
//
this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainer1.Location = new System.Drawing.Point(3, 3);
this.splitContainer1.Location = new System.Drawing.Point(4, 4);
this.splitContainer1.Margin = new System.Windows.Forms.Padding(4);
this.splitContainer1.Name = "splitContainer1";
//
// splitContainer1.Panel1
//
this.splitContainer1.Panel1.Controls.Add(this.chkShowDebug);
this.splitContainer1.Panel1.Controls.Add(this.rdoFatePreset4);
this.splitContainer1.Panel1.Controls.Add(this.rdoFatePreset3);
this.splitContainer1.Panel1.Controls.Add(this.rdoFatePreset2);
@ -184,28 +183,20 @@ namespace DutyContent.Tab
//
// splitContainer1.Panel2
//
this.splitContainer1.Panel2.Controls.Add(this.txtContentLog);
this.splitContainer1.Size = new System.Drawing.Size(786, 493);
this.splitContainer1.SplitterDistance = 262;
this.splitContainer1.Panel2.Controls.Add(this.lstContents);
this.splitContainer1.Size = new System.Drawing.Size(788, 510);
this.splitContainer1.SplitterDistance = 240;
this.splitContainer1.SplitterWidth = 6;
this.splitContainer1.TabIndex = 0;
//
// chkShowDebug
//
this.chkShowDebug.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.chkShowDebug.AutoSize = true;
this.chkShowDebug.Location = new System.Drawing.Point(201, 7);
this.chkShowDebug.Name = "chkShowDebug";
this.chkShowDebug.Size = new System.Drawing.Size(58, 17);
this.chkShowDebug.TabIndex = 5;
this.chkShowDebug.Text = "Debug";
this.chkShowDebug.UseVisualStyleBackColor = true;
//
// rdoFatePreset4
//
this.rdoFatePreset4.AutoSize = true;
this.rdoFatePreset4.Location = new System.Drawing.Point(116, 6);
this.rdoFatePreset4.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.rdoFatePreset4.Location = new System.Drawing.Point(125, 0);
this.rdoFatePreset4.Margin = new System.Windows.Forms.Padding(4);
this.rdoFatePreset4.Name = "rdoFatePreset4";
this.rdoFatePreset4.Size = new System.Drawing.Size(31, 17);
this.rdoFatePreset4.Size = new System.Drawing.Size(32, 19);
this.rdoFatePreset4.TabIndex = 4;
this.rdoFatePreset4.TabStop = true;
this.rdoFatePreset4.Tag = "3";
@ -216,9 +207,11 @@ namespace DutyContent.Tab
// rdoFatePreset3
//
this.rdoFatePreset3.AutoSize = true;
this.rdoFatePreset3.Location = new System.Drawing.Point(79, 6);
this.rdoFatePreset3.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.rdoFatePreset3.Location = new System.Drawing.Point(85, 0);
this.rdoFatePreset3.Margin = new System.Windows.Forms.Padding(4);
this.rdoFatePreset3.Name = "rdoFatePreset3";
this.rdoFatePreset3.Size = new System.Drawing.Size(31, 17);
this.rdoFatePreset3.Size = new System.Drawing.Size(32, 19);
this.rdoFatePreset3.TabIndex = 3;
this.rdoFatePreset3.TabStop = true;
this.rdoFatePreset3.Tag = "2";
@ -229,9 +222,11 @@ namespace DutyContent.Tab
// rdoFatePreset2
//
this.rdoFatePreset2.AutoSize = true;
this.rdoFatePreset2.Location = new System.Drawing.Point(42, 6);
this.rdoFatePreset2.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.rdoFatePreset2.Location = new System.Drawing.Point(45, 0);
this.rdoFatePreset2.Margin = new System.Windows.Forms.Padding(4);
this.rdoFatePreset2.Name = "rdoFatePreset2";
this.rdoFatePreset2.Size = new System.Drawing.Size(31, 17);
this.rdoFatePreset2.Size = new System.Drawing.Size(32, 19);
this.rdoFatePreset2.TabIndex = 2;
this.rdoFatePreset2.TabStop = true;
this.rdoFatePreset2.Tag = "1";
@ -243,9 +238,11 @@ namespace DutyContent.Tab
//
this.rdoFatePreset1.AutoSize = true;
this.rdoFatePreset1.Checked = true;
this.rdoFatePreset1.Location = new System.Drawing.Point(5, 6);
this.rdoFatePreset1.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.rdoFatePreset1.Location = new System.Drawing.Point(5, 0);
this.rdoFatePreset1.Margin = new System.Windows.Forms.Padding(4);
this.rdoFatePreset1.Name = "rdoFatePreset1";
this.rdoFatePreset1.Size = new System.Drawing.Size(31, 17);
this.rdoFatePreset1.Size = new System.Drawing.Size(32, 19);
this.rdoFatePreset1.TabIndex = 1;
this.rdoFatePreset1.TabStop = true;
this.rdoFatePreset1.Tag = "0";
@ -260,23 +257,27 @@ namespace DutyContent.Tab
| System.Windows.Forms.AnchorStyles.Right)));
this.treeFates.CheckBoxes = true;
this.treeFates.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.treeFates.Location = new System.Drawing.Point(0, 29);
this.treeFates.Location = new System.Drawing.Point(0, 27);
this.treeFates.Margin = new System.Windows.Forms.Padding(4);
this.treeFates.Name = "treeFates";
this.treeFates.Size = new System.Drawing.Size(260, 464);
this.treeFates.Size = new System.Drawing.Size(235, 481);
this.treeFates.TabIndex = 0;
this.treeFates.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.TreeFates_AfterCheck);
//
// txtContentLog
// lstContents
//
this.txtContentLog.BackColor = System.Drawing.Color.AliceBlue;
this.txtContentLog.Dock = System.Windows.Forms.DockStyle.Fill;
this.txtContentLog.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.txtContentLog.Location = new System.Drawing.Point(0, 0);
this.txtContentLog.Name = "txtContentLog";
this.txtContentLog.ReadOnly = true;
this.txtContentLog.Size = new System.Drawing.Size(520, 493);
this.txtContentLog.TabIndex = 0;
this.txtContentLog.Text = "";
this.lstContents.ControlPadding = 4;
this.lstContents.Dock = System.Windows.Forms.DockStyle.Fill;
this.lstContents.FullRowSelect = true;
this.lstContents.HideSelection = false;
this.lstContents.Location = new System.Drawing.Point(0, 0);
this.lstContents.Name = "lstContents";
this.lstContents.OwnerDraw = true;
this.lstContents.Size = new System.Drawing.Size(542, 510);
this.lstContents.TabIndex = 0;
this.lstContents.UseCompatibleStateImageBehavior = false;
this.lstContents.View = System.Windows.Forms.View.Details;
this.lstContents.Resize += new System.EventHandler(this.LstContents_Resize);
//
// tabPageSetting
//
@ -287,9 +288,10 @@ namespace DutyContent.Tab
this.tabPageSetting.Controls.Add(this.panel1);
this.tabPageSetting.ImageIndex = 1;
this.tabPageSetting.Location = new System.Drawing.Point(4, 39);
this.tabPageSetting.Margin = new System.Windows.Forms.Padding(4);
this.tabPageSetting.Name = "tabPageSetting";
this.tabPageSetting.Padding = new System.Windows.Forms.Padding(3);
this.tabPageSetting.Size = new System.Drawing.Size(792, 499);
this.tabPageSetting.Padding = new System.Windows.Forms.Padding(4);
this.tabPageSetting.Size = new System.Drawing.Size(796, 518);
this.tabPageSetting.TabIndex = 1;
this.tabPageSetting.Text = "302";
this.tabPageSetting.UseVisualStyleBackColor = true;
@ -313,18 +315,20 @@ namespace DutyContent.Tab
this.panel4.Controls.Add(this.lblLineToken);
this.panel4.Controls.Add(this.txtLineToken);
this.panel4.Controls.Add(this.chkUseNotifyLine);
this.panel4.Location = new System.Drawing.Point(6, 258);
this.panel4.Location = new System.Drawing.Point(0, 267);
this.panel4.Margin = new System.Windows.Forms.Padding(4);
this.panel4.Name = "panel4";
this.panel4.Size = new System.Drawing.Size(778, 196);
this.panel4.Size = new System.Drawing.Size(792, 228);
this.panel4.TabIndex = 3;
//
// chkDiscowkTts
//
this.chkDiscowkTts.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.chkDiscowkTts.AutoSize = true;
this.chkDiscowkTts.Location = new System.Drawing.Point(547, 147);
this.chkDiscowkTts.Location = new System.Drawing.Point(543, 168);
this.chkDiscowkTts.Margin = new System.Windows.Forms.Padding(4);
this.chkDiscowkTts.Name = "chkDiscowkTts";
this.chkDiscowkTts.Size = new System.Drawing.Size(44, 17);
this.chkDiscowkTts.Size = new System.Drawing.Size(51, 22);
this.chkDiscowkTts.TabIndex = 5;
this.chkDiscowkTts.Text = "341";
this.chkDiscowkTts.UseVisualStyleBackColor = true;
@ -333,9 +337,10 @@ namespace DutyContent.Tab
// lblDiscowkUrl
//
this.lblDiscowkUrl.AutoSize = true;
this.lblDiscowkUrl.Location = new System.Drawing.Point(23, 171);
this.lblDiscowkUrl.Location = new System.Drawing.Point(33, 194);
this.lblDiscowkUrl.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lblDiscowkUrl.Name = "lblDiscowkUrl";
this.lblDiscowkUrl.Size = new System.Drawing.Size(25, 13);
this.lblDiscowkUrl.Size = new System.Drawing.Size(32, 18);
this.lblDiscowkUrl.TabIndex = 18;
this.lblDiscowkUrl.Text = "339";
//
@ -343,9 +348,10 @@ namespace DutyContent.Tab
//
this.txtDiscowkUrl.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.txtDiscowkUrl.Location = new System.Drawing.Point(108, 168);
this.txtDiscowkUrl.Location = new System.Drawing.Point(160, 194);
this.txtDiscowkUrl.Margin = new System.Windows.Forms.Padding(4);
this.txtDiscowkUrl.Name = "txtDiscowkUrl";
this.txtDiscowkUrl.Size = new System.Drawing.Size(483, 20);
this.txtDiscowkUrl.Size = new System.Drawing.Size(434, 24);
this.txtDiscowkUrl.TabIndex = 17;
this.txtDiscowkUrl.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TxtDiscowkUrl_KeyDown);
//
@ -353,7 +359,8 @@ namespace DutyContent.Tab
//
this.chkUseNotifyDiscowk.AutoSize = true;
this.chkUseNotifyDiscowk.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.chkUseNotifyDiscowk.Location = new System.Drawing.Point(3, 144);
this.chkUseNotifyDiscowk.Location = new System.Drawing.Point(4, 166);
this.chkUseNotifyDiscowk.Margin = new System.Windows.Forms.Padding(4);
this.chkUseNotifyDiscowk.Name = "chkUseNotifyDiscowk";
this.chkUseNotifyDiscowk.Size = new System.Drawing.Size(58, 24);
this.chkUseNotifyDiscowk.TabIndex = 16;
@ -364,9 +371,10 @@ namespace DutyContent.Tab
// lblTelegramToken
//
this.lblTelegramToken.AutoSize = true;
this.lblTelegramToken.Location = new System.Drawing.Point(23, 118);
this.lblTelegramToken.Location = new System.Drawing.Point(33, 129);
this.lblTelegramToken.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lblTelegramToken.Name = "lblTelegramToken";
this.lblTelegramToken.Size = new System.Drawing.Size(25, 13);
this.lblTelegramToken.Size = new System.Drawing.Size(32, 18);
this.lblTelegramToken.TabIndex = 15;
this.lblTelegramToken.Text = "315";
//
@ -374,26 +382,29 @@ namespace DutyContent.Tab
//
this.txtTelegramToken.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.txtTelegramToken.Location = new System.Drawing.Point(108, 115);
this.txtTelegramToken.Location = new System.Drawing.Point(160, 126);
this.txtTelegramToken.Margin = new System.Windows.Forms.Padding(4);
this.txtTelegramToken.Name = "txtTelegramToken";
this.txtTelegramToken.Size = new System.Drawing.Size(483, 20);
this.txtTelegramToken.Size = new System.Drawing.Size(434, 24);
this.txtTelegramToken.TabIndex = 14;
this.txtTelegramToken.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TxtTelegramToken_KeyDown);
//
// lblTelegramId
//
this.lblTelegramId.AutoSize = true;
this.lblTelegramId.Location = new System.Drawing.Point(23, 92);
this.lblTelegramId.Location = new System.Drawing.Point(33, 97);
this.lblTelegramId.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lblTelegramId.Name = "lblTelegramId";
this.lblTelegramId.Size = new System.Drawing.Size(25, 13);
this.lblTelegramId.Size = new System.Drawing.Size(32, 18);
this.lblTelegramId.TabIndex = 13;
this.lblTelegramId.Text = "314";
//
// txtTelegramId
//
this.txtTelegramId.Location = new System.Drawing.Point(108, 89);
this.txtTelegramId.Location = new System.Drawing.Point(160, 94);
this.txtTelegramId.Margin = new System.Windows.Forms.Padding(4);
this.txtTelegramId.Name = "txtTelegramId";
this.txtTelegramId.Size = new System.Drawing.Size(196, 20);
this.txtTelegramId.Size = new System.Drawing.Size(173, 24);
this.txtTelegramId.TabIndex = 12;
this.txtTelegramId.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TxtTelegramId_KeyDown);
//
@ -401,7 +412,8 @@ namespace DutyContent.Tab
//
this.chkUseNotifyTelegram.AutoSize = true;
this.chkUseNotifyTelegram.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.chkUseNotifyTelegram.Location = new System.Drawing.Point(3, 59);
this.chkUseNotifyTelegram.Location = new System.Drawing.Point(4, 69);
this.chkUseNotifyTelegram.Margin = new System.Windows.Forms.Padding(4);
this.chkUseNotifyTelegram.Name = "chkUseNotifyTelegram";
this.chkUseNotifyTelegram.Size = new System.Drawing.Size(58, 24);
this.chkUseNotifyTelegram.TabIndex = 11;
@ -414,9 +426,10 @@ namespace DutyContent.Tab
this.btnTestNotify.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.btnTestNotify.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.btnTestNotify.Enabled = false;
this.btnTestNotify.Location = new System.Drawing.Point(665, 137);
this.btnTestNotify.Location = new System.Drawing.Point(624, 129);
this.btnTestNotify.Margin = new System.Windows.Forms.Padding(4);
this.btnTestNotify.Name = "btnTestNotify";
this.btnTestNotify.Size = new System.Drawing.Size(108, 51);
this.btnTestNotify.Size = new System.Drawing.Size(162, 92);
this.btnTestNotify.TabIndex = 4;
this.btnTestNotify.Text = "340";
this.btnTestNotify.UseVisualStyleBackColor = true;
@ -426,9 +439,10 @@ namespace DutyContent.Tab
//
this.lblLineNotifyBotLink.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.lblLineNotifyBotLink.AutoSize = true;
this.lblLineNotifyBotLink.Location = new System.Drawing.Point(461, 13);
this.lblLineNotifyBotLink.Location = new System.Drawing.Point(618, 6);
this.lblLineNotifyBotLink.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lblLineNotifyBotLink.Name = "lblLineNotifyBotLink";
this.lblLineNotifyBotLink.Size = new System.Drawing.Size(127, 13);
this.lblLineNotifyBotLink.Size = new System.Drawing.Size(168, 18);
this.lblLineNotifyBotLink.TabIndex = 10;
this.lblLineNotifyBotLink.TabStop = true;
this.lblLineNotifyBotLink.Text = "https://notify-bot.line.me/";
@ -437,9 +451,10 @@ namespace DutyContent.Tab
// lblLineToken
//
this.lblLineToken.AutoSize = true;
this.lblLineToken.Location = new System.Drawing.Point(22, 36);
this.lblLineToken.Location = new System.Drawing.Point(33, 32);
this.lblLineToken.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lblLineToken.Name = "lblLineToken";
this.lblLineToken.Size = new System.Drawing.Size(25, 13);
this.lblLineToken.Size = new System.Drawing.Size(32, 18);
this.lblLineToken.TabIndex = 9;
this.lblLineToken.Text = "312";
//
@ -447,9 +462,10 @@ namespace DutyContent.Tab
//
this.txtLineToken.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.txtLineToken.Location = new System.Drawing.Point(108, 33);
this.txtLineToken.Location = new System.Drawing.Point(160, 29);
this.txtLineToken.Margin = new System.Windows.Forms.Padding(4);
this.txtLineToken.Name = "txtLineToken";
this.txtLineToken.Size = new System.Drawing.Size(483, 20);
this.txtLineToken.Size = new System.Drawing.Size(434, 24);
this.txtLineToken.TabIndex = 1;
this.txtLineToken.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TxtLineToken_KeyDown);
//
@ -457,7 +473,8 @@ namespace DutyContent.Tab
//
this.chkUseNotifyLine.AutoSize = true;
this.chkUseNotifyLine.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.chkUseNotifyLine.Location = new System.Drawing.Point(3, 3);
this.chkUseNotifyLine.Location = new System.Drawing.Point(4, 4);
this.chkUseNotifyLine.Margin = new System.Windows.Forms.Padding(4);
this.chkUseNotifyLine.Name = "chkUseNotifyLine";
this.chkUseNotifyLine.Size = new System.Drawing.Size(58, 24);
this.chkUseNotifyLine.TabIndex = 0;
@ -475,20 +492,20 @@ namespace DutyContent.Tab
this.panel3.Controls.Add(this.lblCurrentDataSet);
this.panel3.Controls.Add(this.cboDataset);
this.panel3.Controls.Add(this.lblDataSet);
this.panel3.Controls.Add(this.btnLogFont);
this.panel3.Controls.Add(this.lblLogFont);
this.panel3.Location = new System.Drawing.Point(6, 6);
this.panel3.Location = new System.Drawing.Point(0, 8);
this.panel3.Margin = new System.Windows.Forms.Padding(4);
this.panel3.Name = "panel3";
this.panel3.Size = new System.Drawing.Size(778, 83);
this.panel3.Size = new System.Drawing.Size(792, 77);
this.panel3.TabIndex = 2;
//
// cboPacketset
//
this.cboPacketset.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cboPacketset.FormattingEnabled = true;
this.cboPacketset.Location = new System.Drawing.Point(110, 54);
this.cboPacketset.Location = new System.Drawing.Point(160, 42);
this.cboPacketset.Margin = new System.Windows.Forms.Padding(4);
this.cboPacketset.Name = "cboPacketset";
this.cboPacketset.Size = new System.Drawing.Size(243, 21);
this.cboPacketset.Size = new System.Drawing.Size(362, 26);
this.cboPacketset.TabIndex = 13;
this.cboPacketset.SelectedIndexChanged += new System.EventHandler(this.CboPacketset_SelectedIndexChanged);
//
@ -496,7 +513,8 @@ namespace DutyContent.Tab
//
this.lblPacketSet.AutoSize = true;
this.lblPacketSet.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblPacketSet.Location = new System.Drawing.Point(21, 52);
this.lblPacketSet.Location = new System.Drawing.Point(32, 44);
this.lblPacketSet.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lblPacketSet.Name = "lblPacketSet";
this.lblPacketSet.Size = new System.Drawing.Size(39, 20);
this.lblPacketSet.TabIndex = 12;
@ -504,20 +522,22 @@ namespace DutyContent.Tab
//
// lblCurrentDataSet
//
this.lblCurrentDataSet.Location = new System.Drawing.Point(110, 30);
this.lblCurrentDataSet.AutoSize = true;
this.lblCurrentDataSet.Location = new System.Drawing.Point(418, 13);
this.lblCurrentDataSet.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lblCurrentDataSet.Name = "lblCurrentDataSet";
this.lblCurrentDataSet.Size = new System.Drawing.Size(243, 15);
this.lblCurrentDataSet.Size = new System.Drawing.Size(18, 18);
this.lblCurrentDataSet.TabIndex = 3;
this.lblCurrentDataSet.Text = "--";
this.lblCurrentDataSet.TextAlign = System.Drawing.ContentAlignment.TopRight;
//
// cboDataset
//
this.cboDataset.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cboDataset.FormattingEnabled = true;
this.cboDataset.Location = new System.Drawing.Point(110, 6);
this.cboDataset.Location = new System.Drawing.Point(160, 8);
this.cboDataset.Margin = new System.Windows.Forms.Padding(4);
this.cboDataset.Name = "cboDataset";
this.cboDataset.Size = new System.Drawing.Size(243, 21);
this.cboDataset.Size = new System.Drawing.Size(250, 26);
this.cboDataset.TabIndex = 11;
this.cboDataset.SelectedIndexChanged += new System.EventHandler(this.CboDataset_SelectedIndexChanged);
//
@ -525,32 +545,13 @@ namespace DutyContent.Tab
//
this.lblDataSet.AutoSize = true;
this.lblDataSet.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblDataSet.Location = new System.Drawing.Point(21, 7);
this.lblDataSet.Location = new System.Drawing.Point(32, 10);
this.lblDataSet.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lblDataSet.Name = "lblDataSet";
this.lblDataSet.Size = new System.Drawing.Size(39, 20);
this.lblDataSet.TabIndex = 10;
this.lblDataSet.Text = "304";
//
// btnLogFont
//
this.btnLogFont.Location = new System.Drawing.Point(427, 30);
this.btnLogFont.Name = "btnLogFont";
this.btnLogFont.Size = new System.Drawing.Size(273, 45);
this.btnLogFont.TabIndex = 3;
this.btnLogFont.Text = "--";
this.btnLogFont.UseVisualStyleBackColor = true;
this.btnLogFont.Click += new System.EventHandler(this.BtnLogFont_Click);
//
// lblLogFont
//
this.lblLogFont.AutoSize = true;
this.lblLogFont.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblLogFont.Location = new System.Drawing.Point(409, 7);
this.lblLogFont.Name = "lblLogFont";
this.lblLogFont.Size = new System.Drawing.Size(39, 20);
this.lblLogFont.TabIndex = 9;
this.lblLogFont.Text = "305";
//
// panel2
//
this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
@ -565,9 +566,10 @@ namespace DutyContent.Tab
this.panel2.Controls.Add(this.txtSoundInstance);
this.panel2.Controls.Add(this.chkEnableSound);
this.panel2.Controls.Add(this.lblSoundInstance);
this.panel2.Location = new System.Drawing.Point(6, 162);
this.panel2.Location = new System.Drawing.Point(0, 161);
this.panel2.Margin = new System.Windows.Forms.Padding(4);
this.panel2.Name = "panel2";
this.panel2.Size = new System.Drawing.Size(778, 90);
this.panel2.Size = new System.Drawing.Size(792, 98);
this.panel2.TabIndex = 1;
//
// btnSoundPlayFate
@ -575,7 +577,8 @@ namespace DutyContent.Tab
this.btnSoundPlayFate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.btnSoundPlayFate.Enabled = false;
this.btnSoundPlayFate.Image = global::DutyContent.Properties.Resources.pix_play;
this.btnSoundPlayFate.Location = new System.Drawing.Point(743, 55);
this.btnSoundPlayFate.Location = new System.Drawing.Point(756, 62);
this.btnSoundPlayFate.Margin = new System.Windows.Forms.Padding(4);
this.btnSoundPlayFate.Name = "btnSoundPlayFate";
this.btnSoundPlayFate.Size = new System.Drawing.Size(30, 30);
this.btnSoundPlayFate.TabIndex = 8;
@ -587,7 +590,8 @@ namespace DutyContent.Tab
this.btnSoundPlayInstance.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.btnSoundPlayInstance.Enabled = false;
this.btnSoundPlayInstance.Image = global::DutyContent.Properties.Resources.pix_play;
this.btnSoundPlayInstance.Location = new System.Drawing.Point(743, 24);
this.btnSoundPlayInstance.Location = new System.Drawing.Point(756, 24);
this.btnSoundPlayInstance.Margin = new System.Windows.Forms.Padding(4);
this.btnSoundPlayInstance.Name = "btnSoundPlayInstance";
this.btnSoundPlayInstance.Size = new System.Drawing.Size(30, 30);
this.btnSoundPlayInstance.TabIndex = 7;
@ -599,7 +603,8 @@ namespace DutyContent.Tab
this.btnSoundFindFate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.btnSoundFindFate.Enabled = false;
this.btnSoundFindFate.Image = global::DutyContent.Properties.Resources.pix_magnify;
this.btnSoundFindFate.Location = new System.Drawing.Point(709, 55);
this.btnSoundFindFate.Location = new System.Drawing.Point(718, 62);
this.btnSoundFindFate.Margin = new System.Windows.Forms.Padding(4);
this.btnSoundFindFate.Name = "btnSoundFindFate";
this.btnSoundFindFate.Size = new System.Drawing.Size(30, 30);
this.btnSoundFindFate.TabIndex = 6;
@ -611,7 +616,8 @@ namespace DutyContent.Tab
this.btnSoundFindInstance.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.btnSoundFindInstance.Enabled = false;
this.btnSoundFindInstance.Image = global::DutyContent.Properties.Resources.pix_magnify;
this.btnSoundFindInstance.Location = new System.Drawing.Point(709, 24);
this.btnSoundFindInstance.Location = new System.Drawing.Point(718, 24);
this.btnSoundFindInstance.Margin = new System.Windows.Forms.Padding(4);
this.btnSoundFindInstance.Name = "btnSoundFindInstance";
this.btnSoundFindInstance.Size = new System.Drawing.Size(30, 30);
this.btnSoundFindInstance.TabIndex = 2;
@ -621,9 +627,10 @@ namespace DutyContent.Tab
// lblSoundFate
//
this.lblSoundFate.AutoSize = true;
this.lblSoundFate.Location = new System.Drawing.Point(22, 64);
this.lblSoundFate.Location = new System.Drawing.Point(33, 65);
this.lblSoundFate.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lblSoundFate.Name = "lblSoundFate";
this.lblSoundFate.Size = new System.Drawing.Size(25, 13);
this.lblSoundFate.Size = new System.Drawing.Size(32, 18);
this.lblSoundFate.TabIndex = 3;
this.lblSoundFate.Text = "310";
//
@ -632,10 +639,11 @@ namespace DutyContent.Tab
this.txtSoundFate.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.txtSoundFate.Enabled = false;
this.txtSoundFate.Location = new System.Drawing.Point(110, 61);
this.txtSoundFate.Location = new System.Drawing.Point(160, 62);
this.txtSoundFate.Margin = new System.Windows.Forms.Padding(4);
this.txtSoundFate.Name = "txtSoundFate";
this.txtSoundFate.ReadOnly = true;
this.txtSoundFate.Size = new System.Drawing.Size(593, 20);
this.txtSoundFate.Size = new System.Drawing.Size(550, 24);
this.txtSoundFate.TabIndex = 4;
//
// txtSoundInstance
@ -643,17 +651,19 @@ namespace DutyContent.Tab
this.txtSoundInstance.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.txtSoundInstance.Enabled = false;
this.txtSoundInstance.Location = new System.Drawing.Point(110, 30);
this.txtSoundInstance.Location = new System.Drawing.Point(160, 30);
this.txtSoundInstance.Margin = new System.Windows.Forms.Padding(4);
this.txtSoundInstance.Name = "txtSoundInstance";
this.txtSoundInstance.ReadOnly = true;
this.txtSoundInstance.Size = new System.Drawing.Size(593, 20);
this.txtSoundInstance.Size = new System.Drawing.Size(550, 24);
this.txtSoundInstance.TabIndex = 5;
//
// chkEnableSound
//
this.chkEnableSound.AutoSize = true;
this.chkEnableSound.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.chkEnableSound.Location = new System.Drawing.Point(5, 3);
this.chkEnableSound.Location = new System.Drawing.Point(8, 4);
this.chkEnableSound.Margin = new System.Windows.Forms.Padding(4);
this.chkEnableSound.Name = "chkEnableSound";
this.chkEnableSound.Size = new System.Drawing.Size(58, 24);
this.chkEnableSound.TabIndex = 4;
@ -664,9 +674,10 @@ namespace DutyContent.Tab
// lblSoundInstance
//
this.lblSoundInstance.AutoSize = true;
this.lblSoundInstance.Location = new System.Drawing.Point(22, 33);
this.lblSoundInstance.Location = new System.Drawing.Point(33, 33);
this.lblSoundInstance.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lblSoundInstance.Name = "lblSoundInstance";
this.lblSoundInstance.Size = new System.Drawing.Size(25, 13);
this.lblSoundInstance.Size = new System.Drawing.Size(32, 18);
this.lblSoundInstance.TabIndex = 2;
this.lblSoundInstance.Text = "309";
//
@ -680,30 +691,34 @@ namespace DutyContent.Tab
this.panel1.Controls.Add(this.btnOverlayDimming);
this.panel1.Controls.Add(this.lblOverlayTransparent);
this.panel1.Controls.Add(this.chkEnableOverlay);
this.panel1.Location = new System.Drawing.Point(6, 95);
this.panel1.Location = new System.Drawing.Point(0, 93);
this.panel1.Margin = new System.Windows.Forms.Padding(4);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(778, 61);
this.panel1.Size = new System.Drawing.Size(792, 60);
this.panel1.TabIndex = 0;
//
// chkOverlayClickThru
//
this.chkOverlayClickThru.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.chkOverlayClickThru.AutoSize = true;
this.chkOverlayClickThru.Location = new System.Drawing.Point(672, 8);
this.chkOverlayClickThru.Location = new System.Drawing.Point(681, 6);
this.chkOverlayClickThru.Margin = new System.Windows.Forms.Padding(4);
this.chkOverlayClickThru.Name = "chkOverlayClickThru";
this.chkOverlayClickThru.Size = new System.Drawing.Size(44, 17);
this.chkOverlayClickThru.Size = new System.Drawing.Size(51, 22);
this.chkOverlayClickThru.TabIndex = 4;
this.chkOverlayClickThru.Text = "104";
this.chkOverlayClickThru.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
this.chkOverlayClickThru.UseVisualStyleBackColor = true;
this.chkOverlayClickThru.CheckedChanged += new System.EventHandler(this.ChkOverlayClickThru_CheckedChanged);
//
// progbOverlayTransparent
//
this.progbOverlayTransparent.Enabled = false;
this.progbOverlayTransparent.Location = new System.Drawing.Point(108, 30);
this.progbOverlayTransparent.Location = new System.Drawing.Point(160, 18);
this.progbOverlayTransparent.Margin = new System.Windows.Forms.Padding(4);
this.progbOverlayTransparent.Maximum = 255;
this.progbOverlayTransparent.Name = "progbOverlayTransparent";
this.progbOverlayTransparent.Size = new System.Drawing.Size(243, 23);
this.progbOverlayTransparent.Size = new System.Drawing.Size(364, 32);
this.progbOverlayTransparent.TabIndex = 1;
this.progbOverlayTransparent.Click += new System.EventHandler(this.ProgbOverlayTransparent_Click);
//
@ -713,9 +728,10 @@ namespace DutyContent.Tab
this.btnOverlayDimming.BackgroundImage = global::DutyContent.Properties.Resources.pix_annotation;
this.btnOverlayDimming.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.btnOverlayDimming.Enabled = false;
this.btnOverlayDimming.Location = new System.Drawing.Point(722, 3);
this.btnOverlayDimming.Location = new System.Drawing.Point(740, 4);
this.btnOverlayDimming.Margin = new System.Windows.Forms.Padding(4);
this.btnOverlayDimming.Name = "btnOverlayDimming";
this.btnOverlayDimming.Size = new System.Drawing.Size(51, 51);
this.btnOverlayDimming.Size = new System.Drawing.Size(46, 46);
this.btnOverlayDimming.TabIndex = 3;
this.btnOverlayDimming.UseVisualStyleBackColor = true;
this.btnOverlayDimming.Click += new System.EventHandler(this.BtnOverlayDimming_Click);
@ -723,9 +739,11 @@ namespace DutyContent.Tab
// lblOverlayTransparent
//
this.lblOverlayTransparent.AutoSize = true;
this.lblOverlayTransparent.Location = new System.Drawing.Point(23, 35);
this.lblOverlayTransparent.Enabled = false;
this.lblOverlayTransparent.Location = new System.Drawing.Point(33, 30);
this.lblOverlayTransparent.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lblOverlayTransparent.Name = "lblOverlayTransparent";
this.lblOverlayTransparent.Size = new System.Drawing.Size(25, 13);
this.lblOverlayTransparent.Size = new System.Drawing.Size(32, 18);
this.lblOverlayTransparent.TabIndex = 2;
this.lblOverlayTransparent.Text = "307";
//
@ -733,7 +751,8 @@ namespace DutyContent.Tab
//
this.chkEnableOverlay.AutoSize = true;
this.chkEnableOverlay.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.chkEnableOverlay.Location = new System.Drawing.Point(3, 3);
this.chkEnableOverlay.Location = new System.Drawing.Point(4, 4);
this.chkEnableOverlay.Margin = new System.Windows.Forms.Padding(4);
this.chkEnableOverlay.Name = "chkEnableOverlay";
this.chkEnableOverlay.Size = new System.Drawing.Size(58, 24);
this.chkEnableOverlay.TabIndex = 0;
@ -747,9 +766,10 @@ namespace DutyContent.Tab
this.tabPagePacket.Controls.Add(this.panel5);
this.tabPagePacket.ImageIndex = 2;
this.tabPagePacket.Location = new System.Drawing.Point(4, 39);
this.tabPagePacket.Margin = new System.Windows.Forms.Padding(4);
this.tabPagePacket.Name = "tabPagePacket";
this.tabPagePacket.Padding = new System.Windows.Forms.Padding(3);
this.tabPagePacket.Size = new System.Drawing.Size(792, 499);
this.tabPagePacket.Padding = new System.Windows.Forms.Padding(4);
this.tabPagePacket.Size = new System.Drawing.Size(796, 518);
this.tabPagePacket.TabIndex = 2;
this.tabPagePacket.Text = "337";
this.tabPagePacket.UseVisualStyleBackColor = true;
@ -769,17 +789,19 @@ namespace DutyContent.Tab
this.panel5.Controls.Add(this.txtPacketInfo);
this.panel5.Controls.Add(this.lstPacketInfo);
this.panel5.Controls.Add(this.lblPacketFinder);
this.panel5.Location = new System.Drawing.Point(6, 6);
this.panel5.Location = new System.Drawing.Point(0, 0);
this.panel5.Margin = new System.Windows.Forms.Padding(4);
this.panel5.Name = "panel5";
this.panel5.Size = new System.Drawing.Size(780, 261);
this.panel5.Size = new System.Drawing.Size(792, 361);
this.panel5.TabIndex = 0;
//
// lblPacketVersion
//
this.lblPacketVersion.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.lblPacketVersion.Location = new System.Drawing.Point(625, 42);
this.lblPacketVersion.Location = new System.Drawing.Point(561, 58);
this.lblPacketVersion.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lblPacketVersion.Name = "lblPacketVersion";
this.lblPacketVersion.Size = new System.Drawing.Size(150, 15);
this.lblPacketVersion.Size = new System.Drawing.Size(225, 21);
this.lblPacketVersion.TabIndex = 9;
this.lblPacketVersion.Text = "--";
this.lblPacketVersion.TextAlign = System.Drawing.ContentAlignment.TopRight;
@ -789,17 +811,19 @@ namespace DutyContent.Tab
this.txtPacketDescription.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.txtPacketDescription.Enabled = false;
this.txtPacketDescription.Location = new System.Drawing.Point(336, 58);
this.txtPacketDescription.Location = new System.Drawing.Point(340, 80);
this.txtPacketDescription.Margin = new System.Windows.Forms.Padding(4);
this.txtPacketDescription.Name = "txtPacketDescription";
this.txtPacketDescription.Size = new System.Drawing.Size(439, 20);
this.txtPacketDescription.Size = new System.Drawing.Size(443, 24);
this.txtPacketDescription.TabIndex = 8;
//
// lblPacketDesc
//
this.lblPacketDesc.AutoSize = true;
this.lblPacketDesc.Location = new System.Drawing.Point(333, 42);
this.lblPacketDesc.Location = new System.Drawing.Point(340, 61);
this.lblPacketDesc.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lblPacketDesc.Name = "lblPacketDesc";
this.lblPacketDesc.Size = new System.Drawing.Size(25, 13);
this.lblPacketDesc.Size = new System.Drawing.Size(32, 18);
this.lblPacketDesc.TabIndex = 7;
this.lblPacketDesc.Text = "317";
//
@ -807,9 +831,10 @@ namespace DutyContent.Tab
//
this.btnPacketApply.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.btnPacketApply.Enabled = false;
this.btnPacketApply.Location = new System.Drawing.Point(652, 3);
this.btnPacketApply.Location = new System.Drawing.Point(601, 4);
this.btnPacketApply.Margin = new System.Windows.Forms.Padding(4);
this.btnPacketApply.Name = "btnPacketApply";
this.btnPacketApply.Size = new System.Drawing.Size(123, 30);
this.btnPacketApply.Size = new System.Drawing.Size(184, 42);
this.btnPacketApply.TabIndex = 6;
this.btnPacketApply.Text = "10009";
this.btnPacketApply.UseVisualStyleBackColor = true;
@ -819,9 +844,10 @@ namespace DutyContent.Tab
// btnPacketStart
//
this.btnPacketStart.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.btnPacketStart.Location = new System.Drawing.Point(523, 3);
this.btnPacketStart.Location = new System.Drawing.Point(407, 4);
this.btnPacketStart.Margin = new System.Windows.Forms.Padding(4);
this.btnPacketStart.Name = "btnPacketStart";
this.btnPacketStart.Size = new System.Drawing.Size(123, 30);
this.btnPacketStart.Size = new System.Drawing.Size(184, 42);
this.btnPacketStart.TabIndex = 5;
this.btnPacketStart.Text = "10007";
this.btnPacketStart.UseVisualStyleBackColor = true;
@ -841,10 +867,11 @@ namespace DutyContent.Tab
this.lstBozjaInfo.GridLines = true;
this.lstBozjaInfo.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
this.lstBozjaInfo.HideSelection = false;
this.lstBozjaInfo.Location = new System.Drawing.Point(333, 107);
this.lstBozjaInfo.Location = new System.Drawing.Point(340, 148);
this.lstBozjaInfo.Margin = new System.Windows.Forms.Padding(4);
this.lstBozjaInfo.MultiSelect = false;
this.lstBozjaInfo.Name = "lstBozjaInfo";
this.lstBozjaInfo.Size = new System.Drawing.Size(442, 148);
this.lstBozjaInfo.Size = new System.Drawing.Size(444, 203);
this.lstBozjaInfo.TabIndex = 4;
this.lstBozjaInfo.UseCompatibleStateImageBehavior = false;
this.lstBozjaInfo.View = System.Windows.Forms.View.Details;
@ -854,7 +881,7 @@ namespace DutyContent.Tab
// columnHeader5
//
this.columnHeader5.Text = "Name";
this.columnHeader5.Width = 233;
this.columnHeader5.Width = 180;
//
// columnHeader6
//
@ -864,19 +891,20 @@ namespace DutyContent.Tab
// columnHeader7
//
this.columnHeader7.Text = "Member";
this.columnHeader7.Width = 55;
this.columnHeader7.Width = 72;
//
// columnHeader8
//
this.columnHeader8.Text = "Progress";
this.columnHeader8.Width = 56;
this.columnHeader8.Width = 73;
//
// lblPacketBozja
//
this.lblPacketBozja.AutoSize = true;
this.lblPacketBozja.Location = new System.Drawing.Point(333, 91);
this.lblPacketBozja.Location = new System.Drawing.Point(340, 126);
this.lblPacketBozja.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lblPacketBozja.Name = "lblPacketBozja";
this.lblPacketBozja.Size = new System.Drawing.Size(25, 13);
this.lblPacketBozja.Size = new System.Drawing.Size(32, 18);
this.lblPacketBozja.TabIndex = 3;
this.lblPacketBozja.Text = "318";
//
@ -885,11 +913,12 @@ namespace DutyContent.Tab
this.txtPacketInfo.BackColor = System.Drawing.SystemColors.Window;
this.txtPacketInfo.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.txtPacketInfo.Enabled = false;
this.txtPacketInfo.Location = new System.Drawing.Point(3, 166);
this.txtPacketInfo.Location = new System.Drawing.Point(4, 206);
this.txtPacketInfo.Margin = new System.Windows.Forms.Padding(4);
this.txtPacketInfo.Multiline = true;
this.txtPacketInfo.Name = "txtPacketInfo";
this.txtPacketInfo.ReadOnly = true;
this.txtPacketInfo.Size = new System.Drawing.Size(324, 89);
this.txtPacketInfo.Size = new System.Drawing.Size(328, 146);
this.txtPacketInfo.TabIndex = 2;
//
// lstPacketInfo
@ -910,10 +939,11 @@ namespace DutyContent.Tab
listViewItem3,
listViewItem4,
listViewItem5});
this.lstPacketInfo.Location = new System.Drawing.Point(3, 42);
this.lstPacketInfo.Location = new System.Drawing.Point(4, 58);
this.lstPacketInfo.Margin = new System.Windows.Forms.Padding(4);
this.lstPacketInfo.MultiSelect = false;
this.lstPacketInfo.Name = "lstPacketInfo";
this.lstPacketInfo.Size = new System.Drawing.Size(324, 118);
this.lstPacketInfo.Size = new System.Drawing.Size(328, 140);
this.lstPacketInfo.TabIndex = 1;
this.lstPacketInfo.UseCompatibleStateImageBehavior = false;
this.lstPacketInfo.View = System.Windows.Forms.View.Details;
@ -923,7 +953,7 @@ namespace DutyContent.Tab
// columnHeader1
//
this.columnHeader1.Text = "Function";
this.columnHeader1.Width = 100;
this.columnHeader1.Width = 101;
//
// columnHeader2
//
@ -944,7 +974,8 @@ namespace DutyContent.Tab
//
this.lblPacketFinder.AutoSize = true;
this.lblPacketFinder.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblPacketFinder.Location = new System.Drawing.Point(3, -1);
this.lblPacketFinder.Location = new System.Drawing.Point(4, -1);
this.lblPacketFinder.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lblPacketFinder.Name = "lblPacketFinder";
this.lblPacketFinder.Size = new System.Drawing.Size(43, 24);
this.lblPacketFinder.TabIndex = 0;
@ -961,11 +992,14 @@ namespace DutyContent.Tab
//
// DutyForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 18F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.AutoScroll = true;
this.ClientSize = new System.Drawing.Size(800, 542);
this.ClientSize = new System.Drawing.Size(804, 561);
this.Controls.Add(this.tabContent);
this.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.Margin = new System.Windows.Forms.Padding(4);
this.MinimumSize = new System.Drawing.Size(820, 39);
this.Name = "DutyForm";
this.Text = "Duty";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.DutyTabForm_FormClosing);
@ -1001,7 +1035,6 @@ namespace DutyContent.Tab
private System.Windows.Forms.ImageList ilTabContent;
private System.Windows.Forms.SplitContainer splitContainer1;
private System.Windows.Forms.TreeView treeFates;
private System.Windows.Forms.RichTextBox txtContentLog;
private System.Windows.Forms.RadioButton rdoFatePreset4;
private System.Windows.Forms.RadioButton rdoFatePreset3;
private System.Windows.Forms.RadioButton rdoFatePreset2;
@ -1022,8 +1055,6 @@ namespace DutyContent.Tab
private System.Windows.Forms.Button btnSoundFindFate;
private System.Windows.Forms.Button btnSoundFindInstance;
private System.Windows.Forms.Panel panel3;
private System.Windows.Forms.Button btnLogFont;
private System.Windows.Forms.Label lblLogFont;
private System.Windows.Forms.ComboBox cboDataset;
private System.Windows.Forms.Label lblDataSet;
private System.Windows.Forms.Label lblCurrentDataSet;
@ -1057,7 +1088,6 @@ namespace DutyContent.Tab
private System.Windows.Forms.Label lblPacketDesc;
private System.Windows.Forms.ColumnHeader columnHeader8;
private System.Windows.Forms.CheckBox chkOverlayClickThru;
private System.Windows.Forms.CheckBox chkShowDebug;
private System.Windows.Forms.ComboBox cboPacketset;
private System.Windows.Forms.Label lblPacketSet;
private System.Windows.Forms.Label lblPacketVersion;
@ -1065,5 +1095,6 @@ namespace DutyContent.Tab
private System.Windows.Forms.TextBox txtDiscowkUrl;
private System.Windows.Forms.CheckBox chkUseNotifyDiscowk;
private System.Windows.Forms.CheckBox chkDiscowkTts;
private ThirdParty.EXListView lstContents;
}
}

View file

@ -33,6 +33,11 @@ namespace DutyContent.Tab
//
private Overlay.DutyOvForm _overlay;
//
private object _lock_contents = new object();
private ImageList _ilCategory;
//
public DutyForm()
{
_self = this;
@ -40,6 +45,17 @@ namespace DutyContent.Tab
InitializeComponent();
_overlay = new Overlay.DutyOvForm();
//
ImageList ildmy = new ImageList() { ImageSize = new Size(1, 40) };
lstContents.SmallImageList = ildmy;
lstContents.MySortBrush = SystemBrushes.ControlLight;
lstContents.MyHighlightBrush = Brushes.LightGoldenrodYellow;
lstContents.GridLines = true;
lstContents.ControlPadding = 1;
ThirdParty.WinFormSupp.DoubleBuffered(lstContents, true);
}
private void DutyTabForm_FormClosing(object sender, FormClosingEventArgs e)
@ -56,8 +72,6 @@ namespace DutyContent.Tab
RefreshDatasetList();
RefreshPacketList();
btnLogFont.Text = $"{DcConfig.Duty.LogFontFamily}, {DcConfig.Duty.LogFontSize}";
//
chkEnableOverlay.Checked = DcConfig.Duty.EnableOverlay;
@ -66,7 +80,7 @@ namespace DutyContent.Tab
chkOverlayClickThru.Checked = DcConfig.Duty.OverlayClickThru;
//
_overlay.SetText(MesgLog.Text(99, DcConfig.PluginVersion.ToString()));
_overlay.SetText(Locale.Text(99, DcConfig.PluginVersion.ToString()));
_overlay.Location = DcConfig.Duty.OverlayLocation;
if (DcConfig.Duty.EnableOverlay)
@ -139,56 +153,120 @@ namespace DutyContent.Tab
public void UpdateUiLocale()
{
tabPageContent.Text = MesgLog.Text(301);
tabPageSetting.Text = MesgLog.Text(302);
tabPagePacket.Text = MesgLog.Text(337);
tabPageContent.Text = Locale.Text(301);
tabPageSetting.Text = Locale.Text(302);
tabPagePacket.Text = Locale.Text(337);
lblDataSet.Text = MesgLog.Text(304);
lblPacketSet.Text = MesgLog.Text(336);
lblLogFont.Text = MesgLog.Text(305);
lblDataSet.Text = Locale.Text(304);
lblPacketSet.Text = Locale.Text(336);
chkEnableOverlay.Text = MesgLog.Text(306);
lblOverlayTransparent.Text = MesgLog.Text(307);
chkOverlayClickThru.Text = MesgLog.Text(104);
chkEnableOverlay.Text = Locale.Text(306);
lblOverlayTransparent.Text = Locale.Text(307);
chkOverlayClickThru.Text = Locale.Text(104);
chkEnableSound.Text = MesgLog.Text(308);
lblSoundInstance.Text = MesgLog.Text(309);
lblSoundFate.Text = MesgLog.Text(310);
chkEnableSound.Text = Locale.Text(308);
lblSoundInstance.Text = Locale.Text(309);
lblSoundFate.Text = Locale.Text(310);
chkUseNotifyLine.Text = MesgLog.Text(311);
lblLineToken.Text = MesgLog.Text(312);
chkUseNotifyLine.Text = Locale.Text(311);
lblLineToken.Text = Locale.Text(312);
chkUseNotifyTelegram.Text = MesgLog.Text(313);
lblTelegramId.Text = MesgLog.Text(314);
lblTelegramToken.Text = MesgLog.Text(315);
chkUseNotifyTelegram.Text = Locale.Text(313);
lblTelegramId.Text = Locale.Text(314);
lblTelegramToken.Text = Locale.Text(315);
chkUseNotifyDiscowk.Text = MesgLog.Text(338);
chkDiscowkTts.Text = MesgLog.Text(341);
lblDiscowkUrl.Text = MesgLog.Text(339);
chkUseNotifyDiscowk.Text = Locale.Text(338);
chkDiscowkTts.Text = Locale.Text(341);
lblDiscowkUrl.Text = Locale.Text(339);
btnTestNotify.Text = MesgLog.Text(340);
btnTestNotify.Text = Locale.Text(340);
lblPacketFinder.Text = MesgLog.Text(316);
lblPacketDesc.Text = MesgLog.Text(317);
lblPacketBozja.Text = MesgLog.Text(318);
lblPacketFinder.Text = Locale.Text(316);
lblPacketDesc.Text = Locale.Text(317);
lblPacketBozja.Text = Locale.Text(318);
lstPacketInfo.Columns[0].Text = MesgLog.Text(319);
lstPacketInfo.Columns[1].Text = MesgLog.Text(320);
lstPacketInfo.Columns[2].Text = MesgLog.Text(321);
lstPacketInfo.Columns[3].Text = MesgLog.Text(322);
lstPacketInfo.Columns[0].Text = Locale.Text(319);
lstPacketInfo.Columns[1].Text = Locale.Text(320);
lstPacketInfo.Columns[2].Text = Locale.Text(321);
lstPacketInfo.Columns[3].Text = Locale.Text(322);
lstBozjaInfo.Columns[0].Text = MesgLog.Text(323);
lstBozjaInfo.Columns[1].Text = MesgLog.Text(324);
lstBozjaInfo.Columns[2].Text = MesgLog.Text(325);
lstBozjaInfo.Columns[3].Text = MesgLog.Text(326);
lstBozjaInfo.Columns[0].Text = Locale.Text(323);
lstBozjaInfo.Columns[1].Text = Locale.Text(324);
lstBozjaInfo.Columns[2].Text = Locale.Text(325);
lstBozjaInfo.Columns[3].Text = Locale.Text(326);
btnPacketStart.Text = MesgLog.Text(10007);
btnPacketApply.Text = MesgLog.Text(10009);
btnPacketStart.Text = Locale.Text(10007);
btnPacketApply.Text = Locale.Text(10009);
//
var logfont = new Font(DcConfig.Duty.LogFontFamily, DcConfig.Duty.LogFontSize, FontStyle.Regular);
txtContentLog.Font = logfont;
btnLogFont.Font = logfont;
// content reset
lock (_lock_contents)
{
lstContents.Items.Clear();
lstContents.Columns.Clear();
Image im_r = Properties.Resources.pix_rdrt_red;
Image im_g = Properties.Resources.pix_rdrt_green;
Image im_p = Properties.Resources.pix_rdrt_puple;
Image im_b = Properties.Resources.pix_rdrt_bline;
_ilCategory = new ImageList()
{
ColorDepth = ColorDepth.Depth32Bit,
ImageSize = new Size(96, 32),
};
_ilCategory.Images.Add(CreateCategoryImage(im_b, Locale.Text(27), Brushes.Black)); // none
_ilCategory.Images.Add(CreateCategoryImage(im_g, Locale.Text(21))); // roulette
_ilCategory.Images.Add(CreateCategoryImage(im_g, Locale.Text(22))); // instance
_ilCategory.Images.Add(CreateCategoryImage(im_r, Locale.Text(23))); // FATE
_ilCategory.Images.Add(CreateCategoryImage(im_r, Locale.Text(24))); // skirmish
_ilCategory.Images.Add(CreateCategoryImage(im_p, Locale.Text(25))); // CE
_ilCategory.Images.Add(CreateCategoryImage(im_p, Locale.Text(38))); // Match
_ilCategory.Images.Add(CreateCategoryImage(im_g, Locale.Text(39))); // Entry
ThirdParty.EXComboBox excbCat = new ThirdParty.EXComboBox();
excbCat.DropDownStyle = ComboBoxStyle.DropDownList;
excbCat.MyHighlightBrush = Brushes.Goldenrod;
excbCat.ItemHeight = 38;
excbCat.Items.Add(new ThirdParty.EXComboBox.EXImageItem(_ilCategory.Images[0], "0"));
excbCat.Items.Add(new ThirdParty.EXComboBox.EXImageItem(_ilCategory.Images[1], "1"));
excbCat.Items.Add(new ThirdParty.EXComboBox.EXImageItem(_ilCategory.Images[2], "2"));
excbCat.Items.Add(new ThirdParty.EXComboBox.EXImageItem(_ilCategory.Images[3], "3"));
excbCat.Items.Add(new ThirdParty.EXComboBox.EXImageItem(_ilCategory.Images[4], "4"));
excbCat.Items.Add(new ThirdParty.EXComboBox.EXImageItem(_ilCategory.Images[5], "5"));
excbCat.Items.Add(new ThirdParty.EXComboBox.EXImageItem(_ilCategory.Images[6], "6"));
excbCat.Items.Add(new ThirdParty.EXComboBox.EXImageItem(_ilCategory.Images[7], "7"));
lstContents.Columns.Add(new ThirdParty.EXColumnHeader("ID", 50));
lstContents.Columns.Add(new ThirdParty.EXColumnHeader("Type", 100));
lstContents.Columns.Add(new ThirdParty.EXColumnHeader("%", 40));
lstContents.Columns.Add(new ThirdParty.EXColumnHeader("Name", 300));
lstContents.BeginUpdate();
ThirdParty.EXListViewItem li = new ThirdParty.EXListViewItem("");
li.SubItems.Add(new ThirdParty.EXImageListViewSubItem(_ilCategory.Images[0], ""));
li.SubItems.Add("");
li.SubItems.Add(Locale.Text(27));
lstContents.Items.Add(li);
lstContents.EndUpdate();
}
}
private Image CreateCategoryImage(Image img, string value, Brush brush = null)
{
Bitmap bmp = new Bitmap(img);
RectangleF rt = new RectangleF(0.0f, 7.0f, 96.0f, 16.0f);
StringFormat fmt = new StringFormat() { Alignment = StringAlignment.Center };
Font fnt = new Font(Font.FontFamily, 14.0f, FontStyle.Regular, GraphicsUnit.Pixel);
if (brush == null)
brush = Brushes.White;
using (var g = Graphics.FromImage(bmp))
g.DrawString(value, fnt, brush, rt, fmt);
return bmp;
}
public void PacketHandler(string pid, byte[] message)
@ -202,7 +280,7 @@ namespace DutyContent.Tab
opcode != DcConfig.Packet.OpDuty &&
opcode != DcConfig.Packet.OpMatch &&
opcode != DcConfig.Packet.OpInstance &&
opcode != DcConfig.Packet.OpSouthernBozja)
opcode != DcConfig.Packet.OpCe)
return;
var data = message.Skip(32).ToArray();
@ -210,18 +288,15 @@ namespace DutyContent.Tab
// FATE
if (opcode == DcConfig.Packet.OpFate)
{
// 53=begin, 54=end, 62=progress
if (data[0] == 53)
{
var fcode = BitConverter.ToUInt16(data, 4);
var fcode = BitConverter.ToUInt16(data, 4);
if (fcode > 100)
if (fcode > 100)
{
// 53=begin, 54=end, 62=progress
if (data[0] == 53)
{
var fate = DcContent.GetFate(fcode);
if (_stq_type != DcContent.SaveTheQueenType.No || IsSkirmishFate(fcode))
LogSkirmish(10001, fate.Name);
else
LogFate(10001, fate.Name);
TraceFate(fcode, true, fate, 0);
if (DcConfig.Duty.Fates[DcConfig.Duty.ActiveFate].Selected.Contains(fcode))
{
@ -232,18 +307,27 @@ namespace DutyContent.Tab
_last_fate = fcode;
}
}
else if (chkShowDebug.Checked && data[0] == 62 && data[8] > 0) // more than 0%
{
var fcode = BitConverter.ToUInt16(data, 4);
if (fcode > 100)
else if (data[0] == 62 && data[8] > 0) // more than 0%
{
var fate = DcContent.TryFate(fcode);
if (fate == null)
LogDebug("unknown fate {0}% \"{1}\"", data[8], fcode);
_last_fate = fcode;
if (fate != null)
TraceFate(fcode, false, fate, data[8]);
else
{
if (DcConfig.DebugEnable)
{
WriteLog(Color.Magenta, 37, 12, fcode);
_last_fate = fcode;
}
}
}
else if (data[0] == 54)
{
var fate = DcContent.TryFate(fcode);
if (fate != null)
TraceFate(fcode, false, fate);
}
}
}
@ -256,11 +340,12 @@ namespace DutyContent.Tab
if (rcode != 0)
{
var roulette = DcContent.GetRoulette(rcode);
LogRoulette(10002, roulette.Name);
TraceEntryRoulette(roulette);
_overlay.PlayQueue(roulette.Name);
}
else
{
// TODO: is this working?
var insts = new List<int>();
for (var i = 0; i < 5; i++)
{
@ -271,12 +356,13 @@ namespace DutyContent.Tab
if (insts.Any())
{
LogInstance(10002, string.Join("/", insts.ToArray()));
_overlay.PlayQueue(MesgLog.Text(10006, $"#{insts.Count}"));
TraceEntryInstance(insts);
_overlay.PlayQueue(Locale.Text(10006, $"#{insts.Count}"));
}
}
DcContent.Missions.Clear();
ResetContents();
}
// match
@ -289,19 +375,19 @@ namespace DutyContent.Tab
if (icode == 0 && rcode != 0)
{
var roulette = DcContent.GetRoulette(rcode);
LogRoulette(10003, roulette.Name);
TraceMatchRoulette(roulette);
name = roulette.Name;
}
else if (icode != 0)
{
var instance = DcContent.GetInstance(icode);
LogInstance(10003, instance.Name);
TraceMatchInstance(instance);
name = instance.Name;
}
else
{
// ???
name = MesgLog.Text(10003, icode);
name = Locale.Text(10003, icode);
}
PlayEffecSoundInstance();
@ -320,8 +406,8 @@ namespace DutyContent.Tab
{
var icode = BitConverter.ToUInt16(data, 0);
var instance = DcContent.GetInstance(icode);
LogInstance(10004, instance.Name);
_overlay.PlayMatch(MesgLog.Text(10004, instance.Name));
TraceEnterInstance(instance);
_overlay.PlayMatch(Locale.Text(10004, instance.Name));
DcContent.Missions.Clear();
}
@ -331,8 +417,8 @@ namespace DutyContent.Tab
}
}
// southen bozja front critical engagement
else if (opcode == DcConfig.Packet.OpSouthernBozja)
// save the queen critical engagement
else if (opcode == DcConfig.Packet.OpCe)
{
// 0[4] timestamp
// 4[2] mmss
@ -354,21 +440,24 @@ namespace DutyContent.Tab
var ce = data[8] + DcContent.SaveTheQueenTypeToCeBase(_stq_type);
var stat = data[10];
var fate = DcContent.GetFate(ce);
if (stat == 0 /* || data[10] == 3 */)
{
if (DcContent.Missions.ContainsKey(ce))
DcContent.Missions.Remove(ce);
TraceCe(ce, false, fate);
}
else if (stat == 1 || stat == 2)
{
var withlog = false;
if (!DcContent.Missions.ContainsKey(ce))
{
withlog = true;
DcContent.Missions.Add(ce, 0);
var fate = DcContent.GetFate(ce);
LogCe(10001, fate.Name);
if (DcConfig.Duty.Fates[DcConfig.Duty.ActiveFate].Selected.Contains(ce))
{
PlayEffectSoundFate();
@ -376,16 +465,15 @@ namespace DutyContent.Tab
_overlay.PlayFate(fate);
}
}
TraceCe(ce, withlog, fate, stat == 1 ? "R" : "E");
}
else if (stat == 3)
{
if (DcContent.Missions.ContainsKey(ce))
{
if (!DcContent.Missions.ContainsKey(ce))
DcContent.Missions.Add(ce, 0);
var fate = DcContent.GetFate(ce);
LogCe(10001, fate.Name);
}
TraceCe(ce, false, fate, data[12].ToString());
}
}
}
@ -403,74 +491,158 @@ namespace DutyContent.Tab
#if false
LogInstance(10025, $"{zone_name} ({zone_id})");
if (chkShowDebug.Checked)
if (DcConfig.DebugEnable)
LogDebug("Zone: {0}", zone_id);
#endif
ResetContents();
}
//
private void WriteLog(Color color, string category, string format, params object[] prms)
{
if (txtContentLog == null || txtContentLog.IsDisposed || format == null)
return;
var fmt = string.Format(format, prms);
var dt = DateTime.Now.ToString("HH:mm:ss");
var ms = $"[{dt}/{category}] {fmt}{Environment.NewLine}";
WorkerAct.Invoker(() =>
{
txtContentLog.SelectionColor = color;
txtContentLog.SelectionStart = txtContentLog.TextLength;
txtContentLog.SelectionLength = 0;
txtContentLog.AppendText(ms);
txtContentLog.SelectionColor = txtContentLog.ForeColor;
ThirdParty.NativeMethods.ScrollToBottom(txtContentLog);
});
}
private void WriteLog(Color color, int catkey, int fmtkey, params object[] prms)
{
string catergory = MesgLog.Text(catkey);
string format = MesgLog.Text(fmtkey);
WriteLog(color, catergory, format, prms);
string category = Locale.Text(catkey);
string format = Locale.Text(fmtkey);
Logger.WriteCategory(color, category, format, prms);
}
//
private void LogDebug(string msg, params object[] prms)
private void TraceFate(ushort code, bool withlog, DcContent.Fate fate, int progress = -1)
{
WriteLog(Color.Red, "Debug", msg, prms);
int key, subs;
if (_stq_type != DcContent.SaveTheQueenType.No || IsSkirmishFate(code))
{
key = 24;
subs = 4;
}
else
{
key = 23;
subs = 3;
}
if (withlog)
WriteLog(Color.Black, key, 10001, fate.Name);
lock (_lock_contents)
{
var sc = code.ToString();
var i = UnsafeFindContent(sc, out int nth);
if (i == null && progress >= 0)
{
var li = new ThirdParty.EXListViewItem(sc);
var si = new ThirdParty.EXImageListViewSubItem(_ilCategory.Images[subs], "");
li.SubItems.Add(si);
li.SubItems.Add(progress.ToString());
li.SubItems.Add(fate.Name);
lstContents.Items.Add(li);
}
else
{
if (progress >= 0)
i.SubItems[2].Text = progress.ToString();
else if (nth >= 0)
lstContents.Items.RemoveAt(nth);
}
}
}
//
private void LogRoulette(int key, params object[] prms)
private void TraceCe(int code, bool withlog, DcContent.Fate fate, string progress = null)
{
WriteLog(Color.Black, 21, key, prms);
if (withlog)
WriteLog(Color.Black, 25, 10001, fate.Name);
lock (_lock_contents)
{
var sc = code.ToString();
var i = UnsafeFindContent(sc, out int nth);
if (i == null && progress != null)
{
var li = new ThirdParty.EXListViewItem(sc);
var si = new ThirdParty.EXImageListViewSubItem(_ilCategory.Images[5], "");
li.SubItems.Add(si);
li.SubItems.Add(progress.ToString());
li.SubItems.Add(fate.Name);
lstContents.Items.Add(li);
}
else
{
if (progress == null)
lstContents.Items.RemoveAt(nth);
else
i.SubItems[2].Text = progress;
}
}
}
//
private void LogInstance(int key, params object[] prms)
private void UpdateTraceInstance(string insname, int count, int imageindex)
{
WriteLog(Color.Black, 22, key, prms);
lock (_lock_contents)
{
if (lstContents.Items.Count > 0)
{
//lstContents.BeginUpdate();
var li = lstContents.Items[0];
var si = li.SubItems[1] as ThirdParty.EXImageListViewSubItem;
si.MyImage = _ilCategory.Images[imageindex];
li.SubItems[2].Text = count == 0 ? string.Empty : count.ToString();
li.SubItems[3].Text = insname;
//lstContents.EndUpdate();
}
}
}
//
private void LogFate(int key, params object[] prms)
private void TraceMatchInstance(DcContent.Instance instance)
{
WriteLog(Color.Black, 23, key, prms);
WriteLog(Color.Black, 22, 10003, instance.Name);
UpdateTraceInstance(instance.Name, 0, 6);
}
//
private void LogSkirmish(int key, params object[] prms)
private void TraceEnterInstance(DcContent.Instance instance)
{
WriteLog(Color.Black, 24, key, prms);
WriteLog(Color.Black, 22, 10004, instance.Name);
UpdateTraceInstance(instance.Name, 0, 2);
}
//
private void LogCe(int key, params object[] prms)
private void TraceEntryInstance(List<int> instances)
{
WriteLog(Color.Black, 25, key, prms);
var ins = string.Join("/", instances.ToArray());
WriteLog(Color.Black, 22, 10002, ins);
UpdateTraceInstance(ins, instances.Count, 7);
}
//
private void TraceMatchRoulette(DcContent.Roulette roulette)
{
WriteLog(Color.Black, 22, 10003, roulette.Name);
UpdateTraceInstance(roulette.Name, 0, 6);
}
//
private void TraceEntryRoulette(DcContent.Roulette roulette)
{
WriteLog(Color.Black, 22, 10002, roulette.Name);
UpdateTraceInstance(roulette.Name, 0, 1);
}
//
@ -584,34 +756,6 @@ namespace DutyContent.Tab
}
}
private void BtnLogFont_Click(object sender, EventArgs e)
{
Font ret = (Font)WorkerAct.Invoker(new WorkerAct.ObjectReturnerDelegate(() =>
{
FontDialog dg = new FontDialog
{
Font = txtContentLog.Font,
FontMustExist = true,
AllowVerticalFonts = false
};
return (dg.ShowDialog() == DialogResult.OK) ? dg.Font : null;
}));
if (ret != null)
{
txtContentLog.Font = ret;
DcConfig.Duty.LogFontFamily = ret.Name;
DcConfig.Duty.LogFontSize = ret.Size;
SaveConfig();
btnLogFont.Font = ret;
btnLogFont.Text = $"{DcConfig.Duty.LogFontFamily}, {DcConfig.Duty.LogFontSize}";
}
}
private void TreeFates_AfterCheck(object sender, TreeViewEventArgs e)
{
if (!DcConfig.PluginEnable)
@ -774,9 +918,9 @@ namespace DutyContent.Tab
{
var dg = new OpenFileDialog
{
Title = MesgLog.Text(101),
Title = Locale.Text(101),
DefaultExt = "wav",
Filter = MesgLog.Text(102)
Filter = Locale.Text(102)
};
return (dg.ShowDialog() == DialogResult.OK) ? dg.FileName : null;
@ -816,7 +960,7 @@ namespace DutyContent.Tab
if (!DcConfig.PluginEnable)
return;
string s = MesgLog.Text(103);
string s = Locale.Text(103);
if (DcConfig.Duty.UseNotifyLine)
await NotifyUsingLine(s);
@ -847,7 +991,7 @@ namespace DutyContent.Tab
if (!DcConfig.Duty.EnableNotify)
return;
string s = MesgLog.Text(10005, f.Name);
string s = Locale.Text(10005, f.Name);
SendNotify(s);
}
@ -857,7 +1001,7 @@ namespace DutyContent.Tab
if (!DcConfig.Duty.EnableNotify)
return;
string s = MesgLog.Text(10003, name);
string s = Locale.Text(10003, name);
SendNotify(s);
}
@ -1070,7 +1214,7 @@ namespace DutyContent.Tab
{
if (!IsValidDiscwkUrl(txtDiscowkUrl.Text))
{
MesgLog.E(342);
Logger.E(342);
return;
}
@ -1107,7 +1251,7 @@ namespace DutyContent.Tab
if (!IsValidDiscwkUrl(txtDiscowkUrl.Text))
{
MesgLog.E(342);
Logger.E(342);
return;
}
@ -1133,12 +1277,12 @@ namespace DutyContent.Tab
{
if (!is_enable)
{
btnPacketStart.Text = MesgLog.Text(10007);
btnPacketStart.Text = Locale.Text(10007);
btnPacketStart.BackColor = Color.Transparent;
}
else
{
btnPacketStart.Text = MesgLog.Text(10008);
btnPacketStart.Text = Locale.Text(10008);
btnPacketStart.BackColor = Color.Salmon;
}
@ -1179,9 +1323,9 @@ namespace DutyContent.Tab
lstPacketInfo.Items[3].SubItems[3].Text = newpk.OpInstance.ToString();
// Bozja
lstPacketInfo.Items[4].SubItems[1].Text = DcConfig.Packet.OpSouthernBozja.ToString();
lstPacketInfo.Items[4].SubItems[1].Text = DcConfig.Packet.OpCe.ToString();
lstPacketInfo.Items[4].SubItems[2].Text = "";
lstPacketInfo.Items[4].SubItems[3].Text = newpk.OpSouthernBozja.ToString();
lstPacketInfo.Items[4].SubItems[3].Text = newpk.OpCe.ToString();
}
private void BtnPacketStart_Click(object sender, EventArgs e)
@ -1200,7 +1344,7 @@ namespace DutyContent.Tab
{
var ret = (DialogResult)WorkerAct.Invoker(new WorkerAct.ObjectReturnerDelegate(() =>
{
var r = MessageBox.Show(MesgLog.Text(10022), MesgLog.Text(0), MessageBoxButtons.YesNo, MessageBoxIcon.Question);
var r = MessageBox.Show(Locale.Text(10022), Locale.Text(0), MessageBoxButtons.YesNo, MessageBoxIcon.Question);
return r;
}));
@ -1237,7 +1381,7 @@ namespace DutyContent.Tab
default: m = 10015; break;
}
txtPacketInfo.Text = MesgLog.Text(m);
txtPacketInfo.Text = Locale.Text(m);
}
private void LstPacketInfo_MouseDoubleClick(object sender, MouseEventArgs e)
@ -1266,13 +1410,13 @@ namespace DutyContent.Tab
break;
case 4:
v = _new_packet.OpSouthernBozja = DcConfig.Packet.OpSouthernBozja;
v = _new_packet.OpCe = DcConfig.Packet.OpCe;
break;
}
if (v != int.MaxValue)
{
lstPacketInfo.SelectedItems[0].SubItems[2].Text = MesgLog.Text(10024);
lstPacketInfo.SelectedItems[0].SubItems[2].Text = Locale.Text(10024);
lstPacketInfo.SelectedItems[0].SubItems[3].Text = v.ToString();
}
}
@ -1284,10 +1428,10 @@ namespace DutyContent.Tab
ushort opcode = (ushort)lstBozjaInfo.SelectedItems[0].Tag;
_new_packet.OpSouthernBozja = opcode;
_new_packet.OpCe = opcode;
lstPacketInfo.Items[4].SubItems[2].Text = MesgLog.Text(10023);
lstPacketInfo.Items[4].SubItems[3].Text = _new_packet.OpSouthernBozja.ToString();
lstPacketInfo.Items[4].SubItems[2].Text = Locale.Text(10023);
lstPacketInfo.Items[4].SubItems[3].Text = _new_packet.OpCe.ToString();
}
private void LstBozjaInfo_MouseDoubleClick(object sender, MouseEventArgs e)
@ -1365,7 +1509,7 @@ namespace DutyContent.Tab
WorkerAct.Invoker(() =>
{
lstPacketInfo.Items[0].SubItems[2].Text = MesgLog.Text(10016);
lstPacketInfo.Items[0].SubItems[2].Text = Locale.Text(10016);
lstPacketInfo.Items[0].SubItems[3].Text = _new_packet.OpFate.ToString();
});
@ -1389,7 +1533,7 @@ namespace DutyContent.Tab
WorkerAct.Invoker(() =>
{
lstPacketInfo.Items[1].SubItems[2].Text = MesgLog.Text(10016);
lstPacketInfo.Items[1].SubItems[2].Text = Locale.Text(10016);
lstPacketInfo.Items[1].SubItems[3].Text = _new_packet.OpDuty.ToString();
});
@ -1412,7 +1556,7 @@ namespace DutyContent.Tab
WorkerAct.Invoker(() =>
{
lstPacketInfo.Items[2].SubItems[2].Text = MesgLog.Text(10016);
lstPacketInfo.Items[2].SubItems[2].Text = Locale.Text(10016);
lstPacketInfo.Items[2].SubItems[3].Text = _new_packet.OpMatch.ToString();
});
@ -1433,7 +1577,7 @@ namespace DutyContent.Tab
WorkerAct.Invoker(() =>
{
lstPacketInfo.Items[3].SubItems[2].Text = MesgLog.Text(10016);
lstPacketInfo.Items[3].SubItems[2].Text = Locale.Text(10016);
lstPacketInfo.Items[3].SubItems[3].Text = _new_packet.OpInstance.ToString();
});
@ -1545,12 +1689,12 @@ namespace DutyContent.Tab
DcConfig.Packet.OpDuty = pk.OpDuty;
DcConfig.Packet.OpMatch = pk.OpMatch;
DcConfig.Packet.OpInstance = pk.OpInstance;
DcConfig.Packet.OpSouthernBozja = pk.OpSouthernBozja;
DcConfig.Packet.OpCe = pk.OpCe;
var nfn = DcConfig.BuildPacketFileName(name);
pk.Save(nfn);
MesgLog.I(33, pk.Version, pk.Description);
Logger.I(33, pk.Version, pk.Description);
//
_packet_list.Remove(name);
@ -1616,5 +1760,65 @@ namespace DutyContent.Tab
cboPacketset.SelectedIndex = n;
}
}
private void LstContents_Resize(object sender, EventArgs e)
{
lock (_lock_contents)
{
if (lstContents.Columns.Count > 0)
{
lstContents.Columns[lstContents.Columns.Count - 1].Width = -2;
}
}
}
private void ResetContents()
{
lock (_lock_contents)
{
lstContents.BeginUpdate();
for (var i = lstContents.Items.Count - 1; i > 0; i--)
lstContents.Items.RemoveAt(1);
lstContents.EndUpdate();
}
}
private ListViewItem UnsafeFindContent(string code, out int nth)
{
nth = -1;
if (lstContents.Items.Count <= 1)
return null;
for (var i = 1; i < lstContents.Items.Count; i++)
{
var v = lstContents.Items[i];
if (v.Text.Equals(code))
{
nth = i;
return v;
}
}
return null;
}
private void RemoveContent(string code)
{
if (lstContents.Items.Count <= 1)
return;
for (var i = 1; i < lstContents.Items.Count; i++)
{
var v = lstContents.Items[i];
if (v.Text.Equals(code))
{
lstContents.Items.RemoveAt(i);
break;
}
}
}
}
}

View file

@ -124,304 +124,301 @@
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACC
RQAAAk1TRnQBSQFMAgEBBAEAAZABAQGQAQEBIAEAASABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAGA
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACw
RAAAAk1TRnQBSQFMAgEBBAEAAbgBAQG4AQEBIAEAASABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAGA
AwABQAMAAQEBAAEgBgABgP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A
/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A
/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8AWgADNgRZAcQDVQHqAwUB/wMFAf8DBQH/AwUB/wMFAf8DBQH/
AwUB/wMFAf8DBQH/AwUB/wMFAf8DBQH/AwUB/wMFAf8DBQH/AwUB/wMFAf8DBQH/AwUB/wMFAf8DBQH/
AwUB/wNdAeIDVAGuAykBPwgAAwcBCgNIAYUCBQGqAf8CAAGqAf8CAAGkAf8CAAGkAf8CAAGkAf8CAAGk
/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8AWgADNgRZAcQDVQHqAwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/
AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/
AwAB/wNdAeIDVAGuAykBPwgAAwcBCgNIAYUCAAGqAf8CAAGqAf8CAAGkAf8CAAGkAf8CAAGkAf8CAAGk
Af8CAAGkAf8CAAGkAf8CAAGjAf8CAAGiAf8CAAGiAf8CAAGiAf8CAAGiAf8CAAGiAf8CAAGiAf8CAAGi
Af8CAAGiAf8CAAGiAf8CAAGiAf8CAAGjAf8CAAGkAf8CAAGkAf8CAAGkAf8CAAGkAf8CAAGkAf8CAAGk
Af8CAAGqAf8CBQGqAf8DSAGFAwcBCv8ABQADTgGXAyYB/wOyAf8DzQH/A90B/wPdAf8D3QH/A90B/wPd
Af8CAAGqAf8CAAGqAf8DSAGFAwcBCv8ABQADTgGXAyEB/wOyAf8DzQH/A90B/wPdAf8D3QH/A90B/wPd
Af8D3QH/A90B/wPdAf8D3QH/A90B/wPdAf8D3QH/A90B/wPdAf8D3QH/A90B/wPdAf8D3QH/A90B/wPd
Af8D3QH/A90B/wPIAf8DogH/AxcB/wNGAYEEAANIAYUCAAGkAf8CAAGiAf8CAAGhAf8CAAGhAf8CAAGh
Af8D3QH/A90B/wPIAf8DogH/AxIB/wNGAYEEAANIAYUCAAGkAf8CAAGiAf8CAAGhAf8CAAGhAf8CAAGh
Af8CAAGhAf8CAAGhAf8CAAGgAf8CAAGeAf8CAAGbAf8CAAGZAf8CAAGZAf8CAAGXAf8CAAGVAf8CAAGV
Af8CAAGVAf8CAAGVAf8CAAGXAf8CAAGZAf8CAAGZAf8CAAGbAf8CAAGeAf8CAAGgAf8CAAGhAf8CAAGh
Af8CAAGhAf8CAAGhAf8CAAGhAf8CAAGiAf8CAAGkAf8DSAGFVwABAQMCBAMEBAEGAwQBBgMDAQQDAQEC
AwABAYwAAzcBWgMyAf8D2wH/A4sB/wMcAf8DBQH/AwUB/wMFAf8DBQH/AwUB/wMFAf8DBQH/AwUB/wMF
Af8DBQH/AwUB/wMFAf8DBQH/AwUB/wMFAf8DBQH/AwUB/wMFAf8DBQH/AwUB/wMFAf8DBQH/AxwB/wOH
Af8DzQH/Ax4B/wMrAUICAAGkAf8CAAGiAf8CAAGdAf8CAAGYAf8CAAGXAf8CAAGXAf8CAAGXAf8CAAGX
AwABAYwAAzcBWgMtAf8D2wH/A4sB/wMXAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMA
Af8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AxcB/wOH
Af8DzQH/AxkB/wMrAUICAAGkAf8CAAGiAf8CAAGdAf8CAAGYAf8CAAGXAf8CAAGXAf8CAAGXAf8CAAGX
Af8CAAGRAf8CAAGPAf8CAAGMAf8CAAGKAf8CAAGKAf8CAAGIAf8CAAGGAf8CAAGGAf8CAAGGAf8CAAGG
Af8CAAGIAf8CAAGKAf8CAAGKAf8CAAGMAf8CAAGPAf8CAAGVAf8CAAGXAf8CAAGXAf8CAAGXAf8CAAGX
Af8CAAGYAf8CAAGdAf8CAAGiAf8CAAGkAf9QAAMCAQMDBgEIAw0BEgMaASQDIwEzAyEBMAMWAR4DCgEO
AwQBBgMAAQGIAANZAcMDsgH/A4oB/wFCATABFgH/AbkBkwEoAf8BzgGiAS4B/wHOAaIBLgH/Ac4BogEu
Af8BzgGiAS4B/wHOAaIBLgH/Ac4BogEuAf8BzgGiAS4B/wHOAaIBLgH/Ac4BogEuAf8BzgGiAS4B/wG9
AZUBJgH/AaMBgAEaAf8BvQGVASYB/wHOAaIBLgH/Ac4BogEuAf8BzgGiAS4B/wHOAaIBLgH/Ac4BogEu
Af8BzgGiAS4B/wHOAaIBLgH/Ac4BogEuAf8BzgGiAS4B/wG5AZMBKAH/AU0BOAEZAf8DhQH/A6MB/wNU
AasCAAGjAf8CAAGaAf8CAAGRAf8CAAGNAf8CAAGNAf8CAAGKAf8CAAGGAf8CAAGBAf8CAAFMAf8CAAFK
Af8CAAFFAf8CAAFEAf8CAAFEAf8CAAFEAf8CAAFAAf8CAAE9Af8CAAE9Af8CAAFAAf8CAAFEAf8CAAFE
Af8CAAFEAf8CAAFFAf8CAAFKAf8CAAGAAf8CAAGGAf8CAAGGAf8CAAGKAf8CAAGNAf8CAAGNAf8CAAGR
AwQBBgMAAQGIAANZAcMDsgH/A4oB/wE9ASsBEQH/AbkBkwEjAf8BzgGiASkB/wHOAaIBKQH/Ac4BogEp
Af8BzgGiASkB/wHOAaIBKQH/Ac4BogEpAf8BzgGiASkB/wHOAaIBKQH/Ac4BogEpAf8BzgGiASkB/wG9
AZUBIQH/AaMBgAEVAf8BvQGVASEB/wHOAaIBKQH/Ac4BogEpAf8BzgGiASkB/wHOAaIBKQH/Ac4BogEp
Af8BzgGiASkB/wHOAaIBKQH/Ac4BogEpAf8BzgGiASkB/wG5AZMBIwH/AUgBMwEUAf8DhQH/A6MB/wNU
AasCAAGjAf8CAAGaAf8CAAGRAf8CAAGNAf8CAAGNAf8CAAGKAf8CAAGGAf8CAAGBAf8CAAFHAf8CAAFF
Af8CAAFAAf8CAAE/Af8CAAE/Af8CAAE/Af8CAAE7Af8CAAE4Af8CAAE4Af8CAAE7Af8CAAE/Af8CAAE/
Af8CAAE/Af8CAAFAAf8CAAFFAf8CAAGAAf8CAAGGAf8CAAGGAf8CAAGKAf8CAAGNAf8CAAGNAf8CAAGR
Af8CAAGaAf8CAAGjAf9MAAMCAQMDBwEKAxcBIAMwAUwBRQJGAX4BTwJRAZwBTQJOAZYDQQFyAyoBQQMS
ARkDBQEHAwABAS8AAf8DAAH/AwAB/wMAAf8DAAH/RAADQQH5A8oB/wMaAf8BuQGPAScB/wHVAaIBLwH/
AdUBogEvAf8B1QGiAS8B/wHVAaIBLwH/AdUBogEvAf8B1QGiAS8B/wHVAaIBLwH/AdUBogEvAf8B1QGi
AS8B/wHVAaIBLwH/AcQBlQEnAf8BiQE5ARMB/wEOAR0BIwH/AZQBPgESAf8B0wGhAS4B/wHVAaIBLwH/
AdUBogEvAf8B1QGiAS8B/wHVAaIBLwH/AdUBogEvAf8B1QGiAS8B/wHVAaIBLwH/AdUBogEvAf8B1QGi
AS8B/wHAAZMBKQH/AxMB/wPFAf8DTgHwAgABmQH/AgABiwH/AgABSgH/AgABRgH/AgABPgH/AgABPgH/
AgABOQH/AgABNgH/AgABNQH/AgABMgH/AgABLgH/AgABLgH/AgABLQH/AgABKgH/AgABJgH/AgABJgH/
AgABJgH/AgABJgH/AgABKgH/AgABLQH/AgABLgH/AgABLgH/AgABMgH/AgABNQH/AgABOAH/AgABPgH/
AgABPgH/AgABPgH/AgABRgH/AgABSgH/AgABiwH/AgABmQH/SAADAQECAwcBCQMYASIDOAFeAVMCVQGt
AV0CYQHiA20B9wNlAfQBXgJhAdoDUAGaAy0BRgMOARMDAwEELwAB/wMAAf8DAAH/AwAB/wMAAf9EAAMF
Af8DwgH/AwcB/wHMAZUBLAH/AdUBmwEuAf8B1QGbAS4B/wHVAZsBLgH/AdUBmwEuAf8B1QGbAS4B/wHV
AZsBLgH/AdUBmwEuAf8B1QGbAS4B/wHVAZsBLgH/Ab8BiwEkAf8BkwE5AREB/wENARsBJAH/AQABIwGO
Af8BPAEpARUB/wGVAToBEQH/Ac8BlwErAf8B1QGbAS4B/wHVAZsBLgH/AdUBmwEuAf8B1QGbAS4B/wHV
AZsBLgH/AdUBmwEuAf8B1QGbAS4B/wHVAZsBLgH/AcUBkAEqAf8DDQH/A8IB/wMFAf8CAAGRAf8CAAGC
Af8BAAERAYQB/wEAARoBhQH/AQABGgGAAf8BAAEcAYMB/wEAARwBgwH/AQABHAGDAf8BAAEcAUwB/wEA
ARwBTAH/AQABHAFMAf8BAAEcAUwB/wEAARwBRwH/AQABGQFEAf8BAAEZAUQB/wEAARkBRAH/AQABGQFE
Af8BAAEZAUQB/wEAARkBRAH/AQABGQFEAf8BAAEZAUkB/wEAARkBSQH/AQABGQFJAf8BAAEZAUkB/wEA
ARoBgwH/AQABHAGDAf8BAAEcAYMB/wEAARwBgwH/AQABHAGIAf8BAAERAYcB/wIAAYMB/wIAAZEB/0cA
AQEDBgEIAxYBHgM4AV0DVQG1A2QB8QHzAfgB/AH/Ae0D/wHzA/8BfwGIAZIB/gNfAeADSAGFAx8BLAMF
AQcvAAH/AwAB/wMAAf8DAAH/AwAB/0QAAwUB/wO0Af8DBQH/Ac4BkAErAf8B1QGUAS0B/wHVAZQBLQH/
AdUBlAEtAf8B1QGUAS0B/wHVAZQBLQH/AdUBlAEtAf8B1AGTAS0B/wHQAZEBKwH/AbQBSwEeAf8BigEx
AREB/wEDARkBKQH/AQABBwFGAf8BAAEHAUEB/wEAAQ4BRwH/ASYBHwEZAf8BkgE0ARAB/wG5AYABIAH/
AdIBkgEsAf8B1QGUAS0B/wHVAZQBLQH/AdUBlAEtAf8B1QGUAS0B/wHVAZQBLQH/AdUBlAEtAf8BxQGL
ASkB/wMMAf8DtAH/AwUB/wIAAYoB/wEAARMBhwH/AQwBhQGpAf8BIwGrAdQB/wE8AdEB3gH/AUEB1AHh
Af8BRAHUAeEB/wFGAdQB4QH/AUYB1AHhAf8BRAHUAeEB/wFBAdQB4QH/AUEB1AHhAf8BQQHTAeAB/wFB
AdEB3gH/AUEB0QHeAf8BQQHRAd4B/wFBAdEB3gH/AUEB0QHeAf8BQQHRAd4B/wFBAdEB3gH/AUEB0QHe
Af8BQQHRAd4B/wFBAdEB3gH/AUEB0QHeAf8BQQHRAeEB/wFBAdQB4QH/AUEB1AHhAf8BPAHUAeEB/wEk
AbIB2AH/AQ4BhQGvAf8BAAETAYsB/wIAAYoB/0MAAQEDBQEHAxQBGwM1AVYDVAGvAVoCXQHwAfMB+AH8
Af8B1AP/AcQB/AL/AcYB/gL/AegD/wFfAWcBcwH7AVUCVgGxAy0BRQMHAQovAAH/AwAB/wMAAf8DAAH/
AwAB/0QAAwUB/wOnAf8DBQH/Ac4BhwEqAf8B1QGLASwB/wHVAYsBLAH/AcsBhAEoAf8BvQFJASEB/wHE
AYABJQH/AcABSwEjAf8BlQEvARAB/wGNASwBEQH/ASoBHQEZAf8BAAERAT4B/wIAATQB/wEMAZEBsgH/
AUEB1QHmAf8BAAEqAYkB/wIAAToB/wEAARUBNQH/AUABIwEUAf8BkgEuARAB/wGxAUIBHAH/AcMBgAEk
Af8BwwGAASQB/wG6AUgBIAH/AdMBigErAf8B1QGLASwB/wHFAYIBKAH/AwwB/wOnAf8DBQH/AgABgQH/
AQABHwGQAf8BHwGhAcIB/wEQAUkBpAH/AQQBGwFKAf8BBQEbAYQB/wEGARsBiAH/AQcBGwGIAf8BBwEb
AYEB/wEGARsBgQH/AQUBGwGBAf8BBQEbAUoB/wEFARsBSQH/AQUBGwFJAf8BBQEbAUkB/wEFARsBSQH/
AQUBGwFJAf8BBQEbAUkB/wEFARsBSQH/AQUBGwFJAf8BBQEbAYEB/wEFARsBgQH/AQUBGwGBAf8BBQEb
AYEB/wEHARwBiAH/AQoBHwGIAf8BBQEbAYQB/wEEARsBSgH/ARABSwGkAf8BHwGhAcMB/wEAAR8BkQH/
AgABgQH/PwABAQMEAQYDEgEYAzIBUANSAakBWQJkAewBfwGIAZIB/gHZA/8BxAH8Av8BwwH7Av8BwwH7
Av8B1wP/A6gB/QFXAlkBvwMyAVADCAELLwAB/wMAAf8DAAH/AwAB/wMAAf9EAAMFAf8DmwH/AwUB/wHO
AU0BKAH/AdUBgwEqAf8BywFLASYB/wGDASQBEQH/ATYBHAEUAf8BRAEfARIB/wE8AR0BEwH/AQ0BGgEl
Af8BAAEUAUIB/wIAAT4B/wEAARkBSAH/ATsB0AHnAf8BRgHdAfEB/wErAacBsQH/AUwB4QH3Af8BIgGp
AcUB/wIAATQB/wEAAQgBRQH/AQABFwE6Af8BHgEaARwB/wFCAR4BEgH/AUMBHgESAf8BMQEcARgB/wGU
ASkBDgH/AdMBggEpAf8BxQFJASYB/wMLAf8DmwH/AwUB/wIAAUwB/wEAASABiwH/ARgBnAG9Af8BAAEH
ATcB/wIAAUMB/wEAASEBmAH/AQABJAGdAf8BAAEiAZ0B/wEAASEBnAH/AQABIQGWAf8BAAEgAZUB/wEA
AR4BkQH/AgABQwH/AgABOgH/AgABOgH/AgABOgH/AgABOgH/AgABOgH/AgABQQH/AQABGgGSAf8BAAEc
AZQB/wEAARIBjQH/AQABKAGYAf8BAAELAY4B/wEAASgBnwH/AQABGAGTAf8CAAFDAf8CAAE0Af8BAAEF
ATUB/wEYAZcBtAH/AQABHwGIAf8CAAFMAf87AAEBAwQBBgMQARUDLAFDAU8CUAGbAVgCYgHpAX8BiAGS
Af4B3gP/AcYB/gL/AcMB+wL/AcMB+wL/AcgD/wHsA/8BXwFqAXMB+wFVAlYBsQMtAUUDBwEKLwAB/wMA
Af8DAAH/AwAB/wMAAf8OAAL/AgAC/wIAAv8CAAL/AgAC/yQAAwUB/wOTAf8DBQH/AcwBRQEmAf8B0wFI
ASgB/wHOAUUBJgH/AYoBIQEOAf8BAAEpAYQB/wEAASEBjQH/AQABGQGIAf8BAAEPAYEB/wEAAUQBnwH/
AT8B1QHmAf8BkAHvAf4B/wEiAZsBvAH/AS4BBAEbAf8BkQEAARkB/wEdARoBMgH/ATkBygHmAf8BkAHt
AfoB/wEpAbQBygH/AQABKgGSAf8BAAERAYEB/wEAARoBhwH/AQABKwGWAf8BCwEbAS4B/wGTASMBDQH/
AdIBSAEoAf8BwwFBASQB/wMKAf8DkwH/AwUB/wIAAUwB/wEAASEBiwH/ARgBnQG9Af8BAAEHAT4B/wEA
ASABlQH/ATUB1gHpAf8BNgHXAfAB/wE1AdIB8AH/ATUB0QHwAf8BNQHRAe4B/wEyAc0B6wH/AS8BxQHn
Af8BAAEEAYoB/wIAAUQB/wIAAUQB/wIAAUQB/wIAAUQB/wIAAUUB/wEAAQYBjAH/ATABwQHiAf8BKgHE
AegB/wEIAYoBzwH/AT4B4QH1Af8BAAE+AcMB/wFAAeEB9QH/ARsBogHVAf8BAAEFAZIB/wIAAUAB/wEA
AQUBPQH/ARYBlAG0Af8BAAEcAYgB/wIAAUwB/zgAAwQBBQMNARIDKAE8A0oBigFeAmEB2gOoAf0B4gP/
AcYB/gL/AcMB+wL/AcMB+wL/AckD/wHpA/8DqAH9AVwCYQHcA0cBggMdASoDBQEHLwAB/wMAAf8DAAH/
AwAB/wMAAf8OAAL/AgAC/wIAAv8CAAL/AgAC/yQAAwUB/wOPAf8DBQH/AckBQgElAf8B0AFFAScB/wHQ
AUUBJwH/AaYBLQEVAf8BEwEXASUB/wEAAUMBowH/ASsBqwHSAf8BkgHrAfgB/wGJAeoB9wH/ASoBogG8
Af8BKgEXATAB/wGaAQsBMQH/Ab8BHgGLAf8BwQEjAZMB/wG7ARwBggH/AYIBBAEjAf8BIgEzAU0B/wE5
AcMB2wH/AZMB8AH8Af8BhgHhAfMB/wEYAZEBuQH/AQABPgGfAf8BQAEYARAB/wG8AToBHwH/AdABRQEn
Af8BwAE+ASMB/wMKAf8DjwH/AwUB/wIAAUwB/wEAASEBiwH/ARgBnQG9Af8BAAEHAUIB/wEAASIBnwH/
ATwB4gH1Af8BQwHsAv8BSAHuAv8BSQHuAv8BSQHuAv8BSQHuAv8BKAHAAesB/wEAAQQBjwH/AgABSQH/
AgABRgH/AgABRAH/AgABRQH/AgABggH/AQoBSAG+Af8BOgHaAfgB/wEKAZgB3wH/ASkBxAHxAf8BHQG2
AeoB/wEVAawB5QH/ATUB1gH5Af8BDwGfAeEB/wEYAZ8B0wH/AQABEQGMAf8BAAEFAUAB/wETAZQBtAH/
AQABHAGIAf8CAAFMAf8kAAMBAQIDAwQEBAYECAELAw8BFAMkATYBRgJHAYABWAJcAdEBXwFqAXYB+wHp
A/8ByAP/AcMB+wL/AcMB+wL/AcwD/wHwA/8BXwFqAXYB+wFZAl0B1wNMAZIDKwFCAw0BEgMDAQQvAAH/
AwAB/wMAAf8DAAH/AwAB/w4AAv8CAAL/AgAC/wIAAv8CAAL/JAADBQH/A48B/wMFAf8BxwFAASUB/wHO
AUMBJwH/Ac4BQwEnAf8BpgEtARYB/wITASEB/wEAATMBkAH/ARIBhwGpAf8BBQEaATIB/wE5AQABFAH/
AaUBDAE0Af8BwgEfAYwB/wHLAS4BpAH/AdIBNgGxAf8B1AE3AbQB/wHRATQBsAH/AcoBLQGiAf8BvgEd
AYQB/wGSAQYBKgH/ASsBAgEUAf8BAAEtAUsB/wEXAYoBrAH/AQABKAGIAf8BPwEYARAB/wG9ATkBIAH/
Ac4BQwEnAf8BvwE9ASMB/wMKAf8DjwH/AwUB/wIAAUwB/wEAASABiwH/ARgBnAG5Af8BAAEHATwB/wEA
ASIBnwH/ATwB4QH1Af8BQQHnAv8BQgHoAv8BQwHoAv8BRQHqAv8BSQHuAv8BKAHAAesB/wEAAQQBjgH/
AgABQwH/AgABQgH/AgABQQH/AgABQQH/AgABgQH/ASABoQHUAf8BQQHmAv8BAAE6AcEB/wFBAeYC/wEJ
AY8B1AH/AS4ByQHxAf8BLgHJAfEB/wEJAY8B1QH/ATcB3AH1Af8BAAEgAZgB/wEAAQUBOwH/ARcBlAG0
Af8BAAEcAYgB/wIAAUwB/xwAAwIBAwMGAQgDDQERAxcBIAMiATIDKgFAAywBQwMxAU4DRwGCAVkCXAHM
AVYBZwFrAfoB7QP/AckD/wHDAfsC/wHDAfsC/wHNA/8B+AP/AlwBXwH4AVwCXgHOAUgCSQGHAysBQgMR
ARcDBAEGAwABAS8AAf8DAAH/AwAB/wMAAf8DAAH/DgAC/wIAAv8CAAL/AgAC/wIAAv8kAAMFAf8DkAH/
AwUB/wHFAT4BJAH/AcwBQQEmAf8BzAFBASYB/wGkASoBFQH/ARABEwEjAf8BAAEtAYkB/wEAATIBjQH/
ARwBDAEmAf8BvAEVAUoB/wHEASUBnAH/AdEBNQGvAf8B3AFBAcEB/wHmAUoBzQH/AekBTQHSAf8B5gFL
Ac0B/wHdAUIBwQH/AdABNQGvAf8BxQEmAZsB/wGzAREBOQH/AQABGgE7Af8BAAE5AZAB/wEAASIBgwH/
AT4BFwEQAf8BuwE4AR8B/wHMAUEBJgH/Ab0BOwEiAf8DCgH/A5AB/wMFAf8CAAFMAf8BAAEgAYsB/wEY
AZsBuAH/AQABBgE6Af8BAAEaAZIB/wElAbsB4AH/ASkBvAHmAf8BKQG/AeYB/wEwAb8B5AH/ATABwQHn
Af8BMAHFAesB/wErAb8B5AH/AQABAQGEAf8CAAFBAf8CAAFBAf8CAAFBAf8CAAFBAf8CAAFEAf8CAAGF
Af8BAAEEAY0B/wIAAYgB/wEAAQQBjwH/AgABiwH/AQABAwGUAf8BAAEEAZYB/wEAAQQBkwH/AQABBAGS
Af8CAAFFAf8BAAEFAToB/wEYAZQBtAH/AQABHAGIAf8CAAFMAf8XAAEBAwQBBQMKAQ4DGgElAzEBTQNE
AXkBTwJQAZsBUwJUAawDVAGuA1UBtQFaAl4B2ANtAfcB9AP/AcoD/wHDAfsC/wHEAfwC/wHRB/8DbQH3
AVgCWwHGA0MBeAMmATgDEAEVAwQBBgMAAQEzAAH/AwAB/wMAAf8DAAH/AwAB/w4AAv8CAAL/AgAC/wIA
Av8CAAL/JAADBQH/A5IB/wMFAf8BwwE7ASMB/wHKAT4BJQH/AcgBPQEkAf8BjAEcAQsB/wEAARIBLwH/
AQABMgGMAf8BAAE+AZ0B/wE5AQoBJgH/AcIBHwGQAf8BzQEwAasB/wHeAUQBxAH/Ae8BhwHaAf8B+wGT
AewB/wH9AZgB9AH/AfsBkwHsAf8B7wGHAdoB/wHeAUQBxAH/Ac4BMAGsAf8BvQEcAYQB/wEIARwBPAH/
AQYBRQGdAf8BAAEhAYQB/wEsARMBFQH/AbABMAEaAf8BygE+ASUB/wG7ATgBIQH/AwoB/wOSAf8DBQH/
AgABTAH/AQABIAGKAf8BGAGXAbYB/wEAAQUBOgH/AgABQwH/AQABAwGPAf8BAAEFAZcB/wEAAQUBlwH/
AQABBQGPAf8BAAEFAY8B/wEAAQUBjwH/AQABAgGIAf8CAAFFAf8CAAFBAf8CAAFBAf8CAAFBAf8CAAFB
Af8CAAFBAf8CAAFBAf8CAAFBAf8CAAFDAf8CAAFJAf8CAAFJAf8CAAFNAf8CAAGDAf8CAAGDAf8CAAFM
Af8CAAE7Af8BAAEFAToB/wEYAZQBtAH/AQABHAGIAf8CAAFMAf8TAAEBAwQBBgMPARQDJAE1AT8CQAFv
A1YBswFbAmEB4QNlAfQBUAFkAWoB+gJcAV8B+ANZAfUBTQFeAWkC+gP/Ac0D/wHDAfsC/wHEAfwC/wHU
A/8B8wH4AfwB/wNZAfUBVgJYAcEDQAFwAyABLgMLAQ8DBAEFAwABARsAAf8DAAH/AwAB/wMAAf8DAAH/
AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/w4AAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/
AgAC/wIAAv8CAAL/DAADBQH/A5YB/wMFAf8BwQE4ASMB/wHIATsBJAH/AcQBOQEiAf8BhwEZAQsB/wEA
ARgBQgH/AQYBQAGXAf8BAAE7AZcB/wGAAQkBKgH/AcYBJQGaAf8B1QE5AbcB/wHqAYAB0gH/AfwBlgHx
Av8BqAH+Av8BrwP/AagB/gH/AfwBlgHxAf8B6gGAAdIB/wHWATkBtwH/AcUBIwGTAf8BHwEVATEB/wEE
AUcBoAH/AQABLQGNAf8BCgESASYB/wGMARoBCgH/AccBOwEkAf8BuQE1ASEB/wMLAf8DlgH/AwUB/wIA
AUsB/wEAAR4BhQH/ARUBlQG0Af8BAAEFAToB/wIAATsB/wIAAUwB/wIAAYMB/wIAAYMB/wIAAUkB/wIA
AUkB/wIAAUYB/wIAAUIB/wIAAUEB/wIAAUEB/wIAAUEB/wIAAUEB/wIAAUEB/wIAAUEB/wIAAUEB/wIA
AUEB/wIAAUMB/wIAAUkB/wIAAUkB/wIAAUkB/wIAAYMB/wIAAYMB/wIAAUwB/wIAATsB/wEAAQUBOgH/
ARgBlAG0Af8BAAEcAYgB/wIAAUwB/xAAAwIBAwMLAQ8DIwE0AUQCRQF8AVcCWgHFA20B9wHzAfgB/AH/
AfED/wHnA/8B6gP/Ae8D/wHkA/8BzQP/AcMB+wL/AcYB/gL/AdoD/wHzAfgB/AH/AWQCZQH0AVYCWAG8
Az0BaQMdASoDCgENAwMBBCMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/
AwAB/w4AAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/DAADBQH/A5oB/wMF
Af8BvgE3ASIB/wHFATkBIwH/Aa8BLQEaAf8BOQETAQ4B/wEAASIBiwH/AR0BiQGrAf8BAAEqAU0B/wGp
AREBOwH/AcgBKQGhAf8B2gE+AbwB/wHwAYgB3AH/Af4BnwH6Av8BtAP/AcID/wG0Av8B/gGfAfoB/wHw
AYgB3AH/AdsBPgG9Af8ByQEoAZ0B/wFFAQoBKQH/AQABRAGdAf8BDAFJAaIB/wEAARcBQgH/AYYBGAEK
Af8BwwE4ASIB/wG2ATQBIAH/AwsB/wOaAf8DBQH/AgABSgH/AQABHAGDAf8BFwGUAbQB/wEAAQUBOgH/
AgABOwH/AgABTAH/AgABgwH/AgABgwH/AgABSQH/AgABSQH/AgABRAH/AgABQQH/AgABQQH/AgABQQH/
AgABQQH/AgABQQH/AgABQQH/AgABQQH/AgABQQH/AgABQQH/AgABQQH/AgABRQH/AgABSQH/AgABSQH/
AgABgwH/AgABgwH/AgABTAH/AgABOwH/AQABBQE6Af8BGAGUAbQB/wEAARwBiAH/AgABTAH/EAADAwEE
AxgBIQM9AWkBVwJZAb8BXAFnAWsB+gHxA/8BzgP/AcQB/AL/AcMB+wL/AcMB+wL/AcMB+wL/AcMB+wL/
AcMB+wL/AcYB/gL/Ad4D/wF/AYgBkgH+AU4CXQHwAVUCVwG3AzsBYwMaASUDCQEMAwMBBCcAAf8DAAH/
AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/w4AAv8CAAL/AgAC/wIAAv8CAAL/
AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/DAADBQH/A58B/wMFAf8BuwE0ASEB/wHAATUBIQH/AYYBFwEJ
Af8BAAERASoB/wEAATABlAH/ASQBlQG5Af8BFAEbATYB/wG4ARQBSAH/AccBKQGgAf8B2QE9AbsB/wHv
AYUB2gH/Af4BnQH6Av8BsQP/AbwD/wGxAv8B/gGdAfoB/wHvAYUB2gH/AdkBPQG8Af8BxwEoAZ8B/wGk
AQ4BNwH/AQABNAGJAf8BKgGXAbgB/wEAASABigH/ATgBEgEPAf8BrQErARkB/wGzATEBHwH/AwsB/wOf
Af8DBQH/AgABSgH/AQABHAGDAf8BGAGUAbQB/wEAAQUBOgH/AQABAgFMAf8BAAEsAawB/wEAATEBtgH/
AQABLwGwAf8BAAEeAaIB/wEAAQgBjgH/AgABTAH/AgABQwH/AgABQQH/AgABQQH/AgABQQH/AgABQQH/
AgABQQH/AgABQQH/AgABQQH/AgABQQH/AgABQQH/AgABRAH/AgABSQH/AgABSQH/AgABgwH/AgABgwH/
AgABTAH/AgABOwH/AQABBQE6Af8BFwGUAbQB/wEAARwBiAH/AgABTAH/EAADBAEGAyMBMwFNAk4BlQNl
AfQE/wHaA/8B2QP/AeAD/wHdA/8BzwP/AcUB/QL/AcMB+wL/AcMB+wL/AdMD/wF/AYgBkgH+AU4CXQHw
AVUCVwG3AzoBYAMYASIDCAELAwIBAysAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMA
Af8DAAH/AwAB/w4AAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/DAADBQH/
A6QB/wMFAf8BuQExAR8B/wGgASMBEwH/ATMBDwENAf8BAAERAUkB/wETAUgBogH/AQABOQGSAf8BQQEB
ARIB/wG3ARQBSwH/AcIBJQGbAf8B0wE3AbMB/wHmAUwBzwH/AfoBkQHrAv8BoAH8Av8BqAH+Av8BoAH8
Af8B+gGRAesB/wHmAUwBzwH/AdMBNwG0Af8BwwEkAZoB/wG2ARIBPwH/ARUBDQEhAf8BDwFKAaQB/wEA
AS4BkQH/AQABCQElAf8BhAEVAQcB/wGpASoBGgH/AwsB/wOkAf8DBQH/AgABSwH/AQABHAGFAf8BGAGU
AbQB/wEAAQUBOgH/AQABIgGSAf8BPAHkAfUB/wFBAekC/wE6AeAB+AH/AR0BsQHfAf8BBQE6AbUB/wEA
AQkBigH/AgABQwH/AgABQQH/AgABQQH/AgABQQH/AgABQQH/AgABQQH/AgABQQH/AgABQQH/AgABQQH/
AgABQgH/AgABRgH/AgABSwH/AgABhAH/AQABAQGNAf8CAAGMAf8CAAGDAf8CAAE8Af8BAAEFAToB/wEV
AZUBtAH/AQABHgGIAf8CAAFMAf8QAAMEAQYDIgEyAUwCTQGRA2QB8QOoAf0BfwGBAY8B/gOoAf0BXwFi
AXMB+wFYAWoBcAH8AecB8QH4Af8B1QP/AcMB+wL/AcMB+wL/AeAD/wJfAW0B+wFaAl0B0wNCAXQDGgEl
AwYBCAMBAQIvAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8OAAL/
AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wwAAwUB/wOqAf8DBQH/AakBJwEY
Af8BOwEQAQ0B/wEsAZYBtQH/AUUBwQHkAf8BlAHYAesB/wEAAR8BiAH/AQABEgEzAf8BoQEKATIB/wG/
AR0BjgH/AcoBLQGmAf8B2gE+AbwB/wHoAYEB0gH/AfQBigHhAf8B+QGQAegB/wH0AYoB4QH/AegBgQHS
Af8B2gE+Ab0B/wHLAS0BpQH/AcABHAGKAf8BSwEJASYB/wEAARABQAH/AQwBSgGpAf8BnAHhAe8B/wE3
AbAB1gH/AR8BGAEgAf8BkAEcAQ8B/wMMAf8DqgH/AwUB/wIAAUwB/wEAARwBiAH/ARgBlAG0Af8BAAEF
AToB/wEAAQwBigH/AQYBjAHPAf8BBgGTAdwB/wEHAY8B1QH/AQABRAHDAf8BAAEeAaUB/wEAAQIBiQH/
AgABSAH/AgABQQH/AgABQQH/AgABQQH/AgABQQH/AgABQQH/AgABQQH/AgABQQH/AgABQQH/AgABQwH/
AgABSwH/AQABBgGOAf8BBAE8AbgB/wEaAZoB0gH/AREBjQHLAf8BAAEjAaUB/wIAAUQB/wEAAQUBOgH/
ARgBlwG2Af8BAAEgAYoB/wIAAUwB/xAAAwMBBAMWAR4DNgFZAU8CUQGcAVcCWQG/AVkCXAHJAVoCXQHK
AVwCXgHOAVgCXwHjAVcCYgH2AfAD/wHDAfsC/wHDAfsC/wHdA/8BYgFuAXIB/ANZAccDNwFbAw8BFAMA
AQFPAAH/AwAB/wMAAf8DAAH/AwAB/w4AAv8CAAL/AgAC/wIAAv8CAAL/JAADBQH/A7AB/wMFAf8BrwEo
ARsB/wFKAQ8BBwH/AS0BCgEMAf8BKAFEAYUB/wGwAe4B9wH/AZsB4wHvAf8BAAEiAZEB/wEAAR4BNwH/
AaUBDgE6Af8BwAEhAZUB/wHLAS8BqQH/AdYBOgG3Af8B3gFEAcIB/wHhAUYBxgH/Ad4BRAHCAf8B1gE6
AbcB/wHLAS8BqAH/AcMBIAGRAf8BgQEKASwB/wEAASgBgAH/AQABQgGlAf8BtwHzAfoB/wGWAdoB5AH/
ASABFQEdAf8BQAEOAQkB/wGjASMBGAH/AwwB/wOwAf8DBQH/AgABTAH/AQABHAGIAf8BGAGUAbQB/wEA
AQUBOgH/AQABGgGPAf8BJgHHAegB/wEtAdAB8wH/AS4BywHyAf8BJAG7AeYB/wEOAY0BzAH/AQABJQGl
Af8BAAEBAYEB/wIAAUEB/wIAAUEB/wIAAUEB/wIAAUEB/wIAAUEB/wIAAUEB/wIAAUEB/wIAAUEB/wIA
AUEB/wIAAUsB/wEAAToBtQH/AS8B0AHxAf8BPwHpAf0B/wE8AeUB+wH/ARgBqQHcAf8BAAEJAYQB/wEA
AQYBOgH/ARgBmwG4Af8BAAEgAYsB/wIAAUwB/xAAAwIBAwMKAQ0DHAEnAy8BSQM8AWYDRAF6A0gBhAFO
Ak8BlwFZAlwBzAFTAmQB8QT/AcMB+wL/AcMB+wL/AdcD/wOoAf0DWwHIAzcBWgMLAQ9TAAH/AwAB/wMA
Af8DAAH/AwAB/w4AAv8CAAL/AgAC/wIAAv8CAAL/JAADBQH/A7YB/wMFAf8BsAEnARsB/wGyAScBGgH/
AZ8BHgESAf8BSwEOAQUB/wESAQoBGQH/AZMB1AHoAf8BlgHeAe8B/wEAATEBlgH/AQoBFQEsAf8BuAES
AUUB/wG/AR8BkwH/AcYBKAGgAf8BywEuAaYB/wHNATABqgH/AcsBLgGmAf8BxgEoAaAB/wHAAR8BkQH/
AZ0BDQE2Af8BAAEqAUQB/wEAAUEBqAH/Aa8B6wH4Af8BPgGgAcMB/wEwAgkB/wFNAQ4BBAH/Aa0BJQEY
Af8BqQElARoB/wMMAf8DtgH/AwUB/wIAAUwB/wEAARwBiAH/ARcBlAG0Af8BAAEFAToB/wEAARUBjgH/
AR8BwwHnAf8BJgHOAfIB/wEmAcgB8gH/ARwBtAHmAf8BCQGKAcoB/wEAASMBnwH/AgABRwH/AgABOAH/
AgABNgH/AgABNgH/AgABNgH/AgABNgH/AgABNgH/AgABNgH/AgABNgH/AgABNwH/AgABRQH/ARABlQHL
Af8BNAHpAf0B/wE2Ae4C/wE2Ae4C/wEoAdUB8AH/AQABFgGQAf8BAAEHAToB/wEYAZwBuQH/AQABIAGL
Af8CAAFMAf8TAAEBAwcBCQMWAR8DLwFJAUECQgFzAUwCTQGRAVACUgGjAVUCVwG6A18B4AFJAmIB9gHz
A/8BwwH7Av8BwwH7Av8B3QP/AWIBbgFyAfwBVwJaAb0DMQFPAwkBDFMAAf8DAAH/AwAB/wMAAf8DAAH/
DgAC/wIAAv8CAAL/AgAC/wIAAv8kAAMFAf8DuwH/AwUB/wGtASQBGgH/AbMBJgEbAf8BswEmARsB/wGo
ASEBFgH/AUoBCwEEAf8BEgEKARkB/wGRAdEB6gH/AUkBugHdAf8BAAE6AZMB/wEzAQcBIgH/AbgBEAFI
Af8BvAEYAYcB/wHAARoBigH/Ab8BGwGMAf8BwAEaAYoB/wG8ARcBhgH/AbQBDwFAAf8BBgEYAS0B/wEA
AUABogH/AZ0B3gHxAf8BPgGgAcYB/wEyAQgBCQH/AZYBGAEPAf8BsgEmARsB/wGzASYBGwH/AaYBIgEZ
Af8DDQH/A7sB/wMFAf8CAAFMAf8BAAEcAYgB/wETAZQBtAH/AQABBQE6Af8BAAEHAYUB/wEAAYIBygH/
AQABjgHXAf8BAAGKAdcB/wEAAYYBzwH/AQABRAHAAf8BAAErAaoB/wEAAQwBjAH/AgABMwH/AgABLQH/
AgABLQH/AgABLQH/AgABLQH/AgABLQH/AgABLQH/AgABLwH/AgABMQH/AgABQQH/AQYBgAHBAf8BKQHj
AfsB/wEtAe4C/wEtAe4C/wEaAcYB6gH/AQABDgGMAf8BAAEHATwB/wEYAZ0BvQH/AQABIQGLAf8CAAFM
Af8TAAEBAwoBDQMqAUABTgJPAZcBWAJcAdEDXAHqA2cB8gNZAfUBXwFiAXMB+wHaAeoB9QH/AdgD/wHD
AfsC/wHFAf0C/wHvA/8DYgH2AVACUgGjAycBOgMHAQlTAAH/AwAB/wMAAf8DAAH/AwAB/w4AAv8CAAL/
AgAC/wIAAv8CAAL/JAADBQH/A8AB/wMFAf8BqQEiARgB/wGvASMBGQH/Aa8BIwEZAf8BrwEjARkB/wGl
AR4BFQH/AUYBCQECAf8BEwEcATEB/wGYAdoB8QH/AR8BjwG8Af8BAAElAUEB/wFCAQABEwH/ATYBCQEk
Af8BJQEPASoB/wElAQ8BKgH/ASkBDgEpAf8BPgEFASAB/wEsAQABEQH/AQABNQGQAf8BTQG8AeAB/wGE
AbsB4QH/ASQBBgEMAf8BkQEVAQwB/wGvASMBGQH/Aa8BIwEZAf8BrwEjARkB/wGiASABFwH/Aw0B/wPA
Af8DBQH/AgABTQH/AQABHAGLAf8BFgGUAbQB/wEAAQEBNgH/AQABFQGMAf8BHgHaAesB/wEjAeQB9QH/
ASMB4gH1Af8BHgHZAfMB/wEYAcIB6QH/AQkBkwHRAf8BAAElAaMB/wIAASoB/wIAASMB/wIAASMB/wIA
ASMB/wIAASMB/wIAASMB/wIAASMB/wIAASYB/wIAASYB/wIAAS4B/wEAARQBkAH/AQoBngHWAf8BHgHR
AfAB/wEYAcMB6gH/AQABRQG9Af8CAAFDAf8BAAEDATwB/wEYAZ0BvQH/AQABIQGOAf8CAAFNAf8TAAEB
Aw8BFAM7AWMDXgHYBP8B+wP/AfMD/wHuA/8B4gP/AdED/wHGAf4C/wHEAfwC/wHWA/8B5wHxAfgB/wFX
AlwB3wNEAXkDGAEiAwQBBlMAAf8DAAH/AwAB/wMAAf8DAAH/DgAC/wIAAv8CAAL/AgAC/wIAAv8kAAMF
Af8DxwH/AwUB/wGmAR4BFwH/AawBHwEYAf8BrAEfARgB/wGsAR8BGAH/AawBHwEYAf8BmgEXARAB/wE9
AQcBBQH/ATABkAGyAf8BlgHSAfEB/wEAATgBogH/AQABMQGLAf8BAAE5AZMB/wEAAT8BmgH/AQABQQGc
Af8BAAE+AZcB/wEAATkBkwH/AQABLAGLAf8BGgGJAbsB/wGYAdgB8wH/ARQBIgE4Af8BRQEHAQIB/wGr
AR4BFwH/AawBHwEYAf8BrAEfARgB/wGsAR8BGAH/AZ8BHQEWAf8DDQH/A8cB/wMFAf8CAAGFAf8BAwEj
AY0B/wEYAZcBtAH/AgABNAH/AgABNQH/AQABGQGMAf8BAAEbAZIB/wEAARsBkgH/AQABGQGQAf8BAAEU
AYYB/wEAAQcBRwH/AgABNwH/AgABIAH/AgABGgH/AgABGgH/AgABGgH/AgABGgH/AgABGgH/AgABGgH/
AgABGgH/AgABIAH/AgABIQH/AgABLAH/AgABRwH/AQABFQGKAf8BAAENAYUB/wIAAUAB/wIAAS0B/wIA
ATUB/wEYAZwBuQH/AQMBJAGRAf8CAAGFAf8TAAEBAw0BEgM4AVwBWAJbAcsBfwGFAY4B/gHqA/8BzQP/
AcQB/AL/AcMB+wL/AcMB+wL/AcYB/gL/AdgD/wHzAfgB/AH/A10B8ANSAakDLgFHAwwBEAMCAQNTAAH/
AwAB/wMAAf8DAAH/AwAB/0QAAwUB/wPPAf8DBQH/AaMBGwEVAf8BqAEcARYB/wGoARwBFgH/AagBHAEW
Af8BqAEcARYB/wGoARwBFgH/AY0BDwEKAf8BGAEKARUB/wGMAdIB8wH/AcMB8AH4Af8B1QHuAfcB/wHg
AfcB/AH/AecD/wHoA/8B5gH+Av8B3QHyAfoB/wHNAe0B9wH/AbUB7wH7Af8BPgGrAc8B/wEzAQMBBQH/
AZYBFAEOAf8BqAEcARYB/wGoARwBFgH/AagBHAEWAf8BqAEcARYB/wGdARoBFAH/Aw4B/wPPAf8DBQH/
AgABigH/AQQBJgGYAf8BGQGVAbYB/wEDASoBiAH/AQABAwEzAf8BAAEDATgB/wEAAQMBOAH/AQABAwE4
Af8BAAEDATIB/wEAAQMBMgH/AQABAwEyAf8BAAEDAS0B/wIAASwB/wIAASwB/wIAASwB/wIAASwB/wIA
ASwB/wIAASwB/wIAASwB/wIAASwB/wEAAQMBLQH/AQABBAEzAf8BAAEFATQB/wEAAQUBNAH/AQABBQE6
Af8BAAEFAToB/wEAAQQBOQH/AQABAwEzAf8BAQEqAYcB/wEYAZQBtQH/AQQBJgGYAf8CAAGKAf8TAAEB
AwcBCgMmATgDSgGLAVkCXAHPAlwBXwH4AfMB+AH8Af8B8gP/AeYD/wHoA/8B+gP/AX8BiAGSAf4DYQHu
A1UBsgM4AVwDFQEdAwUBBwMAAQFTAAH/AwAB/wMAAf8DAAH/AwAB/0QAAwUB/wPXAf8DBQH/AZ8BGAEU
Af8BpAEZARUB/wGkARkBFQH/AaQBGQEVAf8BpAEZARUB/wGkARkBFQH/AZkBFAEQAf8BLQEBAQUB/wGv
AdwB5AH/AeIB8AHyAf8BjQGkAa8B/wExATcBQwH/AR8BGwEpAf8BIAEcASoB/wEiAR8BLAH/ATwBSAGG
Af8BpQHAAcUB/wHvAvsB/wEoAYIBlwH/AT4BAgEBAf8BowEYARQB/wGkARkBFQH/AaQBGQEVAf8BpAEZ
ARUB/wGkARkBFQH/AZkBFwETAf8DDgH/A9cB/wMFAf8CAAGUAf8BAwEhAZsB/wEkAaIBwwH/ATcBtwHN
Af8BMwG5Ac0B/wEzAbkBzQH/ATEBuQHNAf8BMAG5Ac0B/wEwAbkBzQH/ATABuQHNAf8BMAG5Ac0B/wEw
AbkBzQH/ATABuQHNAf8BMAG5Ac0B/wEwAbkBzQH/ATABuQHNAf8BMAG5Ac0B/wEwAbkBzQH/ATABuQHN
Af8BMAG5Ac0B/wEzAbkBzQH/ATMBvAHPAf8BMwG/AdIB/wEzAb8B0gH/ATMBvwHSAf8BMwG/AdIB/wEx
AbwBzwH/ATABuQHNAf8BLwG2AcgB/wEfAZ4BwAH/AQMBIAGbAf8CAAGUAf8UAAMEAQUDEQEXAykBPwNE
AXkBVQJWAbQBXAJhAdwDXwHzAVABZAFqAfoBUAFkAWoB+gNdAe0BWwJeAdABUAJRAZ8DNgFZAxgBIQMH
AQoDAQECVwAB/wMAAf8DAAH/AwAB/wMAAf9EAAMFAf8D3wH/AwUB/wGcARUBEwH/AaEBFgEUAf8BoQEW
ARQB/wGhARYBFAH/AaEBFgEUAf8BoQEWARQB/wGbARMBEQH/ATMBAAEDAf8BjwGWAaEB/wEhAQABBgH/
ATsCAAH/AT4CAAH/AYEBCAEGAf8BgQEIAQYB/wGBAQgBBgH/AT0CAAH/ATgBAAEBAf8BFQEJARgB/wFF
AUkBiAH/AT0CAAH/AaABFQETAf8BoQEWARQB/wGhARYBFAH/AaEBFgEUAf8BoQEWARQB/wGWARQBEgH/
Aw8B/wPfAf8DBQH/AgABngH/AQABBwGUAf8BDwEpAZ8B/wEiAUkBrgH/ASUBTQGrAf8BJQFNAasB/wEj
AU0BqwH/ASIBTQGnAf8BIgFNAaYB/wEgAUoBpgH/ARwBRwGmAf8BHAFHAaIB/wEcAUcBoQH/ARwBRwGh
Af8BHAFHAaEB/wEcAUcBoQH/ARwBRwGhAf8BHAFHAaEB/wEcAUcBoQH/ARwBRwGhAf8BIAFHAaIB/wEg
AUcBpgH/ASMBSgGmAf8BJQFNAaYB/wElAU0BpwH/ASUBTQGrAf8BIwFNAasB/wEiAU0BqwH/AR8BSQGu
Af8BDQEpAZ8B/wEAAQcBlAH/AgABngH/FwABAQMEAQYDDAEQAxwBKAMxAU0DQgF1A04BmQFTAlUBrQNS
AakDSwGOATwCPQFnAykBPgMUARsDBwEJAwIBA1sAAf8DAAH/AwAB/wMAAf8DAAH/RAADTAHzA98B/wMc
Af8BigIPAf8BmwERARIB/wGbAREBEgH/AZsBEQESAf8BmwERARIB/wGbAREBEgH/AZoBEAERAf8BOAIA
Af8BMgIAAf8BOgIAAf8BmQEQAREB/wGaAREBEgH/AZsBEQESAf8BmwERARIB/wGbAREBEgH/AZoBEAER
Af8BkgENAQ4B/wE5AgAB/wEvAQABAQH/AToCAAH/AZoBEQESAf8BmwERARIB/wGbAREBEgH/AZsBEQES
Af8BmwERARIB/wFKAQ0BDgH/AyQB/wPdAf8DTgHwAgQBpAH/AgABngH/AgABlAH/AgABjwH/AgABjAH/
AgABhgH/AgABggH/AgABTAH/AgABTAH/AgABSQH/AgABRgH/AgABRAH/AgABRAH/AgABRAH/AgABRAH/
AgABRAH/AgABRAH/AgABRAH/AgABRAH/AgABRAH/AgABRAH/AgABRgH/AgABSQH/AgABTAH/AgABTAH/
AgABggH/AgABhgH/AgABjAH/AgABjwH/AgABlAH/AgABngH/AgQBpAH/GwABAQMCAQMDBgEIAwwBEAMW
AR4DIgEyAyoBQAMpAT4DHwEsAxIBGQMKAQ0DBAEGAwEBAl8AAf8DAAH/AwAB/wMAAf8DAAH/RAADVwG9
A78B/wOUAf8BMAEOARAB/wGKAQ0BEwH/AZMBCwESAf8BkwELARIB/wGTAQsBEgH/AZMBCwESAf8BkwEL
ARIB/wGSAQsBEQH/AY4BCQEQAf8BkgELARIB/wGTAQsBEgH/AZMBCwESAf8BkwELARIB/wGTAQsBEgH/
AZMBCwESAf8BkwELARIB/wGTAQsBEgH/AZIBCwERAf8BjQEJAQ8B/wGSAQsBEgH/AZMBCwESAf8BkwEL
ARIB/wGTAQsBEgH/AZMBCwESAf8BgAEOARMB/wElAQ0BDwH/A7QB/wO0Af8DVAGuAgcBrAH/AgcBqQH/
AgcBpgH/AgIBpgH/AgEBpgH/AgEBowH/AgEBnwH/AgABngH/AgABlwH/AgABlwH/AgABlgH/AgABlgH/
AgABjgH/AgABjgH/AgABjgH/AgABjgH/AgABjgH/AgABjgH/AgABjgH/AgABjgH/AgABlgH/AgABlgH/
AgABlwH/AgABlwH/AgABngH/AgEBnwH/AgEBowH/AgEBpgH/AgIBpgH/AgcBpgH/AgcBqQH/AgcBrAH/
JAADAQECAwMEBAQGAQgDBgEIAwQBBgMDAQQDAAEBZwAB/wMAAf8DAAH/AwAB/wMAAf9EAAM0AVQDNAH/
A+4B/wOTAf8DGwH/AwUB/wMFAf8DBQH/AwUB/wMFAf8DBQH/AwUB/wMFAf8DBQH/AwUB/wMFAf8DBQH/
AwUB/wMFAf8DBQH/AwUB/wMFAf8DBQH/AwUB/wMFAf8DBQH/AwUB/wMkAf8DsgH/A+oB/wMkAf8DLQFF
AgcBrAH/AgcBrAH/AgcBrAH/AgcBrAH/AgcBrAH/AgcBrAH/AgcBrAH/AgMBqAH/AgIBpAH/AgABogH/
AgABnwH/AgABnwH/AgABnAH/AgABnAH/AgABnAH/AgABnAH/AgABnAH/AgABnAH/AgABnAH/AgABnAH/
AgABnwH/AgABnwH/AgABogH/AgIBpwH/AgMBqAH/AgcBrAH/AgcBrAH/AgcBrAH/AgcBrAH/AgcBrAH/
AgcBrAH/AgcBrAH//wAFAANKAY0DMwH/A80B/wP5Af8D+wH/A/sB/wP7Af8D+wH/A/sB/wP7Af8D+wH/
A/sB/wP7Af8D+wH/A/sB/wP7Af8D+wH/A/sB/wP7Af8D+wH/A/sB/wP7Af8D+wH/A/sB/wP7Af8D+wH/
A+sB/wO9Af8DHgH/A0gBhwQAA0gBhQIHAawB/wIHAawB/wIHAawB/wIHAawB/wIHAawB/wIHAawB/wIH
AawB/wIGAakB/wIEAakB/wIEAaYB/wIAAaQB/wIAAaEB/wIAAaEB/wIAAaEB/wIAAaEB/wIAAaEB/wIA
AaEB/wIAAaEB/wIAAaEB/wIAAaQB/wIEAaYB/wIEAakB/wIGAasB/wIHAawB/wIHAawB/wIHAawB/wIH
AawB/wIHAawB/wIHAawB/wIHAawB/wNIAYX/AAkAAzcBWgNZAcMDKwH8AwUB/wMFAf8DBQH/AwUB/wMF
Af8DBQH/AwUB/wMFAf8DBQH/AwUB/wMFAf8DBQH/AwUB/wMFAf8DBQH/AwUB/wMFAf8DBQH/AwUB/wMF
Af8DBQH/AwUB/wNVAeoDVAGuAy0BRQgAAwcBCgNIAYUCBwGsAf8CBwGsAf8CBwGsAf8CBwGsAf8CBwGs
Af8CBwGsAf8CBwGsAf8CBwGsAf8CBwGrAf8CBgGqAf8CBQGqAf8CBQGoAf8CBQGkAf8CBQGkAf8CBQGk
Af8CBQGkAf8CBQGoAf8CBQGqAf8CBgGqAf8CBwGrAf8CBwGsAf8CBwGsAf8CBwGsAf8CBwGsAf8CBwGs
Af8CBwGsAf8CBwGsAf8CBwGsAf8DSAGFAwcBCv8AAQABQgFNAT4HAAE+AwABKAMAAYADAAFAAwABAQEA
AQEGAAEEFgAD//8A/wADAAHAAgABAwQACP8BgAIAAQEEAAL/AfgBBwT/CAAC/wHwAQME/wgAAv8B4AEB
Af8BwQL/CAAC/wHAAQEB/wHBAv8IAAL/AYABAQH/AcEC/wgAAv8BAAEBAf8BwQL/CAAB/wH+AQABAQH/
AcEC/wgAAf8B/AEAAQEB/wLBAf8IAAH/AfwBAAEBAf8CwQH/CAAB/wGAAQABAQH/AsEB/wgAAf4CAAEB
Af8CwQH/CAAB+AIAAQMB/wLBAf8IAAHwAgABBwHgAQEBwAEHCAAB8AIAAR8B4AEBAcABBwgAAfACAAE/
AeABAQHAAQcIAAHwAgABfwHgAQEBwAEHCAAB8AIAAf8B4AEBAcABBwgAAfABAAEBAv8CwQH/CAAB8AEA
AQMC/wLBAf8IAAHwAQABAwL/AsEB/wgAAfABAAEDAv8CwQH/CAAB8AEAAQMC/wLBAf8IAAHwAQABAwL/
AcEC/wgAAfABAAEDAv8BwQL/CAAB+AEAAQcC/wHBAv8IAAH4AQABDwL/AcEC/wgAAfwBAAEfAv8BwQL/
CAAB/wGAAX8C/wHBAv8IAAj/AYACAAEBBAAI/wHAAgABAwQACP8L
ARkDBQEHAwABAS8AAf8DAAH/AwAB/wMAAf8DAAH/RAADQQH5A8oB/wMVAf8BuQGPASIB/wHVAaIBKgH/
AdUBogEqAf8B1QGiASoB/wHVAaIBKgH/AdUBogEqAf8B1QGiASoB/wHVAaIBKgH/AdUBogEqAf8B1QGi
ASoB/wHVAaIBKgH/AcQBlQEiAf8BiQE0AQ4B/wEJARgBHgH/AZQBOQENAf8B0wGhASkB/wHVAaIBKgH/
AdUBogEqAf8B1QGiASoB/wHVAaIBKgH/AdUBogEqAf8B1QGiASoB/wHVAaIBKgH/AdUBogEqAf8B1QGi
ASoB/wHAAZMBJAH/Aw4B/wPFAf8DTgHwAgABmQH/AgABiwH/AgABRQH/AgABQQH/AgABOQH/AgABOQH/
AgABNAH/AgABMQH/AgABMAH/AgABLQH/AgABKQH/AgABKQH/AgABKAH/AgABJQH/AgABIQH/AgABIQH/
AgABIQH/AgABIQH/AgABJQH/AgABKAH/AgABKQH/AgABKQH/AgABLQH/AgABMAH/AgABMwH/AgABOQH/
AgABOQH/AgABOQH/AgABQQH/AgABRQH/AgABiwH/AgABmQH/SAADAQECAwcBCQMYASIDOAFeAVMCVQGt
AV0CYQHiA20B9wNlAfQBXgJhAdoDUAGaAy0BRgMOARMDAwEELwAB/wMAAf8DAAH/AwAB/wMAAf9HAAH/
A8IB/wMCAf8BzAGVAScB/wHVAZsBKQH/AdUBmwEpAf8B1QGbASkB/wHVAZsBKQH/AdUBmwEpAf8B1QGb
ASkB/wHVAZsBKQH/AdUBmwEpAf8B1QGbASkB/wG/AYsBHwH/AZMBNAEMAf8BCAEWAR8B/wEAAR4BjgH/
ATcBJAEQAf8BlQE1AQwB/wHPAZcBJgH/AdUBmwEpAf8B1QGbASkB/wHVAZsBKQH/AdUBmwEpAf8B1QGb
ASkB/wHVAZsBKQH/AdUBmwEpAf8B1QGbASkB/wHFAZABJQH/AwgB/wPCAf8DAAH/AgABkQH/AgABggH/
AQABDAGEAf8BAAEVAYUB/wEAARUBgAH/AQABFwGDAf8BAAEXAYMB/wEAARcBgwH/AQABFwFHAf8BAAEX
AUcB/wEAARcBRwH/AQABFwFHAf8BAAEXAUIB/wEAARQBPwH/AQABFAE/Af8BAAEUAT8B/wEAARQBPwH/
AQABFAE/Af8BAAEUAT8B/wEAARQBPwH/AQABFAFEAf8BAAEUAUQB/wEAARQBRAH/AQABFAFEAf8BAAEV
AYMB/wEAARcBgwH/AQABFwGDAf8BAAEXAYMB/wEAARcBiAH/AQABDAGHAf8CAAGDAf8CAAGRAf9HAAEB
AwYBCAMWAR4DOAFdA1UBtQNkAfEB8wH4AfwB/wHtA/8B8wP/An8BiAH+A18B4ANIAYUDHwEsAwUBBy8A
Af8DAAH/AwAB/wMAAf8DAAH/RwAB/wO0Af8DAAH/Ac4BkAEmAf8B1QGUASgB/wHVAZQBKAH/AdUBlAEo
Af8B1QGUASgB/wHVAZQBKAH/AdUBlAEoAf8B1AGTASgB/wHQAZEBJgH/AbQBRgEZAf8BigEsAQwB/wEA
ARQBJAH/AQABAgFBAf8BAAECATwB/wEAAQkBQgH/ASEBGgEUAf8BkgEvAQsB/wG5AYABGwH/AdIBkgEn
Af8B1QGUASgB/wHVAZQBKAH/AdUBlAEoAf8B1QGUASgB/wHVAZQBKAH/AdUBlAEoAf8BxQGLASQB/wMH
Af8DtAH/AwAB/wIAAYoB/wEAAQ4BhwH/AQcBhQGpAf8BHgGrAdQB/wE3AdEB3gH/ATwB1AHhAf8BPwHU
AeEB/wFBAdQB4QH/AUEB1AHhAf8BPwHUAeEB/wE8AdQB4QH/ATwB1AHhAf8BPAHTAeAB/wE8AdEB3gH/
ATwB0QHeAf8BPAHRAd4B/wE8AdEB3gH/ATwB0QHeAf8BPAHRAd4B/wE8AdEB3gH/ATwB0QHeAf8BPAHR
Ad4B/wE8AdEB3gH/ATwB0QHeAf8BPAHRAeEB/wE8AdQB4QH/ATwB1AHhAf8BNwHUAeEB/wEfAbIB2AH/
AQkBhQGvAf8BAAEOAYsB/wIAAYoB/0MAAQEDBQEHAxQBGwM1AVYDVAGvAVoCXQHwAfMB+AH8Af8B1AP/
AcQB/AL/AcYB/gL/AegD/wJfAWQB+wFVAlYBsQMtAUUDBwEKLwAB/wMAAf8DAAH/AwAB/wMAAf9HAAH/
A6cB/wMAAf8BzgGHASUB/wHVAYsBJwH/AdUBiwEnAf8BywGEASMB/wG9AUQBHAH/AcQBgAEgAf8BwAFG
AR4B/wGVASoBCwH/AY0BJwEMAf8BJQEYARQB/wEAAQwBOQH/AgABLwH/AQcBkQGyAf8BPAHVAeYB/wEA
ASUBiQH/AgABNQH/AQABEAEwAf8BOwEeAQ8B/wGSASkBCwH/AbEBPQEXAf8BwwGAAR8B/wHDAYABHwH/
AboBQwEbAf8B0wGKASYB/wHVAYsBJwH/AcUBggEjAf8DBwH/A6cB/wMAAf8CAAGBAf8BAAEaAZAB/wEa
AaEBwgH/AQsBRAGkAf8BAAEWAUUB/wEAARYBhAH/AQEBFgGIAf8BAgEWAYgB/wECARYBgQH/AQEBFgGB
Af8BAAEWAYEB/wEAARYBRQH/AQABFgFEAf8BAAEWAUQB/wEAARYBRAH/AQABFgFEAf8BAAEWAUQB/wEA
ARYBRAH/AQABFgFEAf8BAAEWAUQB/wEAARYBgQH/AQABFgGBAf8BAAEWAYEB/wEAARYBgQH/AQIBFwGI
Af8BBQEaAYgB/wEAARYBhAH/AQABFgFFAf8BCwFGAaQB/wEaAaEBwwH/AQABGgGRAf8CAAGBAf8/AAEB
AwQBBgMSARgDMgFQA1IBqQFZAmQB7AJ/AYgB/gHZA/8BxAH8Av8BwwH7Av8BwwH7Av8B1wP/A6gB/QFX
AlkBvwMyAVADCAELLwAB/wMAAf8DAAH/AwAB/wMAAf9HAAH/A5sB/wMAAf8BzgFIASMB/wHVAYMBJQH/
AcsBRgEhAf8BgwEfAQwB/wExARcBDwH/AT8BGgENAf8BNwEYAQ4B/wEIARUBIAH/AQABDwE9Af8CAAE5
Af8BAAEUAUMB/wE2AdAB5wH/AUEB3QHxAf8BJgGnAbEB/wFHAeEB9wH/AR0BqQHFAf8CAAEvAf8BAAED
AUAB/wEAARIBNQH/ARkBFQEXAf8BPQEZAQ0B/wE+ARkBDQH/ASwBFwETAf8BlAEkAQkB/wHTAYIBJAH/
AcUBRAEhAf8DBgH/A5sB/wMAAf8CAAFHAf8BAAEbAYsB/wETAZwBvQH/AQABAgEyAf8CAAE+Af8BAAEc
AZgB/wEAAR8BnQH/AQABHQGdAf8BAAEcAZwB/wEAARwBlgH/AQABGwGVAf8BAAEZAZEB/wIAAT4B/wIA
ATUB/wIAATUB/wIAATUB/wIAATUB/wIAATUB/wIAATwB/wEAARUBkgH/AQABFwGUAf8BAAENAY0B/wEA
ASMBmAH/AQABBgGOAf8BAAEjAZ8B/wEAARMBkwH/AgABPgH/AgABLwH/AgABMAH/ARMBlwG0Af8BAAEa
AYgB/wIAAUcB/zsAAQEDBAEGAxABFQMsAUMBTwJQAZsBWAJiAekCfwGIAf4B3gP/AcYB/gL/AcMB+wL/
AcMB+wL/AcgD/wHsA/8CXwFkAfsBVQJWAbEDLQFFAwcBCi8AAf8DAAH/AwAB/wMAAf8DAAH/DgAC/wIA
Av8CAAL/AgAC/wIAAv8nAAH/A5MB/wMAAf8BzAFAASEB/wHTAUMBIwH/Ac4BQAEhAf8BigEcAQkB/wEA
ASQBhAH/AQABHAGNAf8BAAEUAYgB/wEAAQoBgQH/AQABPwGfAf8BOgHVAeYB/wGQAe8B/gH/AR0BmwG8
Af8BKQEAARYB/wGRAQABFAH/ARgBFQEtAf8BNAHKAeYB/wGQAe0B+gH/ASQBtAHKAf8BAAElAZIB/wEA
AQwBgQH/AQABFQGHAf8BAAEmAZYB/wEGARYBKQH/AZMBHgEIAf8B0gFDASMB/wHDATwBHwH/AwUB/wOT
Af8DAAH/AgABRwH/AQABHAGLAf8BEwGdAb0B/wEAAQIBOQH/AQABGwGVAf8BMAHWAekB/wExAdcB8AH/
ATAB0gHwAf8BMAHRAfAB/wEwAdEB7gH/AS0BzQHrAf8BKgHFAecB/wIAAYoB/wIAAT8B/wIAAT8B/wIA
AT8B/wIAAT8B/wIAAUAB/wEAAQEBjAH/ASsBwQHiAf8BJQHEAegB/wEDAYoBzwH/ATkB4QH1Af8BAAE5
AcMB/wE7AeEB9QH/ARYBogHVAf8CAAGSAf8CAAE7Af8CAAE4Af8BEQGUAbQB/wEAARcBiAH/AgABRwH/
OAADBAEFAw0BEgMoATwDSgGKAV4CYQHaA6gB/QHiA/8BxgH+Av8BwwH7Av8BwwH7Av8ByQP/AekD/wOo
Af0BXAJhAdwDRwGCAx0BKgMFAQcvAAH/AwAB/wMAAf8DAAH/AwAB/w4AAv8CAAL/AgAC/wIAAv8CAAL/
JwAB/wOPAf8DAAH/AckBPQEgAf8B0AFAASIB/wHQAUABIgH/AaYBKAEQAf8BDgESASAB/wEAAT4BowH/
ASYBqwHSAf8BkgHrAfgB/wGJAeoB9wH/ASUBogG8Af8BJQESASsB/wGaAQYBLAH/Ab8BGQGLAf8BwQEe
AZMB/wG7ARcBggH/AYIBAAEeAf8BHQEuAUgB/wE0AcMB2wH/AZMB8AH8Af8BhgHhAfMB/wETAZEBuQH/
AQABOQGfAf8BOwETAQsB/wG8ATUBGgH/AdABQAEiAf8BwAE5AR4B/wMFAf8DjwH/AwAB/wIAAUcB/wEA
ARwBiwH/ARMBnQG9Af8BAAECAT0B/wEAAR0BnwH/ATcB4gH1Af8BPgHsAv8BQwHuAv8BRAHuAv8BRAHu
Av8BRAHuAv8BIwHAAesB/wIAAY8B/wIAAUQB/wIAAUEB/wIAAT8B/wIAAUAB/wIAAYIB/wEFAUMBvgH/
ATUB2gH4Af8BBQGYAd8B/wEkAcQB8QH/ARgBtgHqAf8BEAGsAeUB/wEwAdYB+QH/AQoBnwHhAf8BEwGf
AdMB/wEAAQwBjAH/AgABOwH/AQ4BlAG0Af8BAAEXAYgB/wIAAUcB/yQAAwEBAgMDBAQEBgQIAQsDDwEU
AyQBNgFGAkcBgAFYAlwB0QJfAWcB+wHpA/8ByAP/AcMB+wL/AcMB+wL/AcwD/wHwA/8CXwFnAfsBWQJd
AdcDTAGSAysBQgMNARIDAwEELwAB/wMAAf8DAAH/AwAB/wMAAf8OAAL/AgAC/wIAAv8CAAL/AgAC/ycA
Af8DjwH/AwAB/wHHATsBIAH/Ac4BPgEiAf8BzgE+ASIB/wGmASgBEQH/Ag4BHAH/AQABLgGQAf8BDQGH
AakB/wEAARUBLQH/ATQBAAEPAf8BpQEHAS8B/wHCARoBjAH/AcsBKQGkAf8B0gExAbEB/wHUATIBtAH/
AdEBLwGwAf8BygEoAaIB/wG+ARgBhAH/AZIBAQElAf8BJgEAAQ8B/wEAASgBRgH/ARIBigGsAf8BAAEj
AYgB/wE6ARMBCwH/Ab0BNAEbAf8BzgE+ASIB/wG/ATgBHgH/AwUB/wOPAf8DAAH/AgABRwH/AQABGwGL
Af8BEwGcAbkB/wEAAQIBNwH/AQABHQGfAf8BNwHhAfUB/wE8AecC/wE9AegC/wE+AegC/wFAAeoC/wFE
Ae4C/wEjAcAB6wH/AgABjgH/AgABPgH/AgABPQH/AgABPAH/AgABPAH/AgABgQH/ARsBoQHUAf8BPAHm
Av8BAAE1AcEB/wE8AeYC/wEEAY8B1AH/ASkByQHxAf8BKQHJAfEB/wEEAY8B1QH/ATIB3AH1Af8BAAEb
AZgB/wIAATYB/wESAZQBtAH/AQABFwGIAf8CAAFHAf8cAAMCAQMDBgEIAw0BEQMXASADIgEyAyoBQAMs
AUMDMQFOA0cBggFZAlwBzAFQAV4BZgH6Ae0D/wHJA/8BwwH7Av8BwwH7Av8BzQP/AfgD/wNcAfgBXAJe
Ac4BSAJJAYcDKwFCAxEBFwMEAQYDAAEBLwAB/wMAAf8DAAH/AwAB/wMAAf8OAAL/AgAC/wIAAv8CAAL/
AgAC/ycAAf8DkAH/AwAB/wHFATkBHwH/AcwBPAEhAf8BzAE8ASEB/wGkASUBEAH/AQsBDgEeAf8BAAEo
AYkB/wEAAS0BjQH/ARcBBwEhAf8BvAEQAUUB/wHEASABnAH/AdEBMAGvAf8B3AE8AcEB/wHmAUUBzQH/
AekBSAHSAf8B5gFGAc0B/wHdAT0BwQH/AdABMAGvAf8BxQEhAZsB/wGzAQwBNAH/AQABFQE2Af8BAAE0
AZAB/wEAAR0BgwH/ATkBEgELAf8BuwEzARoB/wHMATwBIQH/Ab0BNgEdAf8DBQH/A5AB/wMAAf8CAAFH
Af8BAAEbAYsB/wETAZsBuAH/AQABAQE1Af8BAAEVAZIB/wEgAbsB4AH/ASQBvAHmAf8BJAG/AeYB/wEr
Ab8B5AH/ASsBwQHnAf8BKwHFAesB/wEmAb8B5AH/AgABhAH/AgABPAH/AgABPAH/AgABPAH/AgABPAH/
AgABPwH/AgABhQH/AgABjQH/AgABiAH/AgABjwH/AgABiwH/AgABlAH/AgABlgH/AgABkwH/AgABkgH/
AgABQAH/AgABNQH/ARMBlAG0Af8BAAEXAYgB/wIAAUcB/xcAAQEDBAEFAwoBDgMaASUDMQFNA0QBeQFP
AlABmwFTAlQBrANUAa4DVQG1AVoCXgHYA20B9wH0A/8BygP/AcMB+wL/AcQB/AL/AdEH/wNtAfcBWAJb
AcYDQwF4AyYBOAMQARUDBAEGAwABATMAAf8DAAH/AwAB/wMAAf8DAAH/DgAC/wIAAv8CAAL/AgAC/wIA
Av8nAAH/A5IB/wMAAf8BwwE2AR4B/wHKATkBIAH/AcgBOAEfAf8BjAEXAQYB/wEAAQ0BKgH/AQABLQGM
Af8BAAE5AZ0B/wE0AQUBIQH/AcIBGgGQAf8BzQErAasB/wHeAT8BxAH/Ae8BhwHaAf8B+wGTAewB/wH9
AZgB9AH/AfsBkwHsAf8B7wGHAdoB/wHeAT8BxAH/Ac4BKwGsAf8BvQEXAYQB/wEDARcBNwH/AQEBQAGd
Af8BAAEcAYQB/wEnAQ4BEAH/AbABKwEVAf8BygE5ASAB/wG7ATMBHAH/AwUB/wOSAf8DAAH/AgABRwH/
AQABGwGKAf8BEwGXAbYB/wIAATUB/wIAAT4B/wIAAY8B/wIAAZcB/wIAAZcB/wIAAY8B/wIAAY8B/wIA
AY8B/wIAAYgB/wIAAUAB/wIAATwB/wIAATwB/wIAATwB/wIAATwB/wIAATwB/wIAATwB/wIAATwB/wIA
AT4B/wIAAUQB/wIAAUQB/wIAAUgB/wIAAYMB/wIAAYMB/wIAAUcB/wIAATYB/wIAATUB/wETAZQBtAH/
AQABFwGIAf8CAAFHAf8TAAEBAwQBBgMPARQDJAE1AT8CQAFvA1YBswFbAmEB4QNlAfQBTQFaAWQB+gNc
AfgDWQH1AU0BVAFiAvoD/wHNA/8BwwH7Av8BxAH8Av8B1AP/AfMB+AH8Af8DWQH1AVYCWAHBA0ABcAMg
AS4DCwEPAwQBBQMAAQEbAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMA
Af8OAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/w8AAf8DlgH/AwAB/wHB
ATMBHgH/AcgBNgEfAf8BxAE0AR0B/wGHARQBBgH/AQABEwE9Af8BAQE7AZcB/wEAATYBlwH/AYABBAEl
Af8BxgEgAZoB/wHVATQBtwH/AeoBgAHSAf8B/AGWAfEC/wGoAf4C/wGvA/8BqAH+Af8B/AGWAfEB/wHq
AYAB0gH/AdYBNAG3Af8BxQEeAZMB/wEaARABLAH/AQABQgGgAf8BAAEoAY0B/wEFAQ0BIQH/AYwBFQEF
Af8BxwE2AR8B/wG5ATABHAH/AwYB/wOWAf8DAAH/AgABRgH/AQABGQGFAf8BEAGVAbQB/wIAATUB/wIA
ATYB/wIAAUcB/wIAAYMB/wIAAYMB/wIAAUQB/wIAAUQB/wIAAUEB/wIAAT0B/wIAATwB/wIAATwB/wIA
ATwB/wIAATwB/wIAATwB/wIAATwB/wIAATwB/wIAATwB/wIAAT4B/wIAAUQB/wIAAUQB/wIAAUQB/wIA
AYMB/wIAAYMB/wIAAUcB/wIAATYB/wIAATUB/wETAZQBtAH/AQABFwGIAf8CAAFHAf8QAAMCAQMDCwEP
AyMBNAFEAkUBfAFXAloBxQNtAfcB8wH4AfwB/wHxA/8B5wP/AeoD/wHvA/8B5AP/Ac0D/wHDAfsC/wHG
Af4C/wHaA/8B8wH4AfwB/wFkAmUB9AFWAlgBvAM9AWkDHQEqAwoBDQMDAQQjAAH/AwAB/wMAAf8DAAH/
AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8OAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/
AgAC/wIAAv8CAAL/AgAC/w8AAf8DmgH/AwAB/wG+ATIBHQH/AcUBNAEeAf8BrwEoARUB/wE0AQ4BCQH/
AQABHQGLAf8BGAGJAasB/wEAASUBSAH/AakBDAE2Af8ByAEkAaEB/wHaATkBvAH/AfABiAHcAf8B/gGf
AfoC/wG0A/8BwgP/AbQC/wH+AZ8B+gH/AfABiAHcAf8B2wE5Ab0B/wHJASMBnQH/AUABBQEkAf8BAAE/
AZ0B/wEHAUQBogH/AQABEgE9Af8BhgETAQUB/wHDATMBHQH/AbYBLwEbAf8DBgH/A5oB/wMAAf8CAAFF
Af8BAAEXAYMB/wESAZQBtAH/AgABNQH/AgABNgH/AgABRwH/AgABgwH/AgABgwH/AgABRAH/AgABRAH/
AgABPwH/AgABPAH/AgABPAH/AgABPAH/AgABPAH/AgABPAH/AgABPAH/AgABPAH/AgABPAH/AgABPAH/
AgABPAH/AgABQAH/AgABRAH/AgABRAH/AgABgwH/AgABgwH/AgABRwH/AgABNgH/AgABNQH/ARMBlAG0
Af8BAAEXAYgB/wIAAUcB/xAAAwMBBAMYASEDPQFpAVcCWQG/AVMBXgFmAfoB8QP/Ac4D/wHEAfwC/wHD
AfsC/wHDAfsC/wHDAfsC/wHDAfsC/wHDAfsC/wHGAf4C/wHeA/8CfwGIAf4BTgJdAfABVQJXAbcDOwFj
AxoBJQMJAQwDAwEEJwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/
DgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8PAAH/A58B/wMAAf8BuwEv
ARwB/wHAATABHAH/AYYBEgEEAf8BAAEMASUB/wEAASsBlAH/AR8BlQG5Af8BDwEWATEB/wG4AQ8BQwH/
AccBJAGgAf8B2QE4AbsB/wHvAYUB2gH/Af4BnQH6Av8BsQP/AbwD/wGxAv8B/gGdAfoB/wHvAYUB2gH/
AdkBOAG8Af8BxwEjAZ8B/wGkAQkBMgH/AQABLwGJAf8BJQGXAbgB/wEAARsBigH/ATMBDQEKAf8BrQEm
ARQB/wGzASwBGgH/AwYB/wOfAf8DAAH/AgABRQH/AQABFwGDAf8BEwGUAbQB/wIAATUB/wIAAUcB/wEA
AScBrAH/AQABLAG2Af8BAAEqAbAB/wEAARkBogH/AQABAwGOAf8CAAFHAf8CAAE+Af8CAAE8Af8CAAE8
Af8CAAE8Af8CAAE8Af8CAAE8Af8CAAE8Af8CAAE8Af8CAAE8Af8CAAE8Af8CAAE/Af8CAAFEAf8CAAFE
Af8CAAGDAf8CAAGDAf8CAAFHAf8CAAE2Af8CAAE1Af8BEgGUAbQB/wEAARcBiAH/AgABRwH/EAADBAEG
AyMBMwFNAk4BlQNlAfQE/wHaA/8B2QP/AeAD/wHdA/8BzwP/AcUB/QL/AcMB+wL/AcMB+wL/AdMD/wJ/
AYgB/gFOAl0B8AFVAlcBtwM6AWADGAEiAwgBCwMCAQMrAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/
AwAB/wMAAf8DAAH/AwAB/wMAAf8OAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/
AgAC/w8AAf8DpAH/AwAB/wG5ASwBGgH/AaABHgEOAf8BLgEKAQgB/wEAAQwBRAH/AQ4BQwGiAf8BAAE0
AZIB/wE8AQABDQH/AbcBDwFGAf8BwgEgAZsB/wHTATIBswH/AeYBRwHPAf8B+gGRAesC/wGgAfwC/wGo
Af4C/wGgAfwB/wH6AZEB6wH/AeYBRwHPAf8B0wEyAbQB/wHDAR8BmgH/AbYBDQE6Af8BEAEIARwB/wEK
AUUBpAH/AQABKQGRAf8BAAEEASAB/wGEARABAgH/AakBJQEVAf8DBgH/A6QB/wMAAf8CAAFGAf8BAAEX
AYUB/wETAZQBtAH/AgABNQH/AQABHQGSAf8BNwHkAfUB/wE8AekC/wE1AeAB+AH/ARgBsQHfAf8BAAE1
AbUB/wEAAQQBigH/AgABPgH/AgABPAH/AgABPAH/AgABPAH/AgABPAH/AgABPAH/AgABPAH/AgABPAH/
AgABPAH/AgABPQH/AgABQQH/AgABRgH/AgABhAH/AgABjQH/AgABjAH/AgABgwH/AgABNwH/AgABNQH/
ARABlQG0Af8BAAEZAYgB/wIAAUcB/xAAAwQBBgMiATIBTAJNAZEDZAHxA6gB/QJ/AYUB/gOoAf0CXwFk
AfsBUQFlAWsB/AHnAfEB+AH/AdUD/wHDAfsC/wHDAfsC/wHgA/8CXwFgAfsBWgJdAdMDQgF0AxoBJQMG
AQgDAQECLwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/DgAC/wIA
Av8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8PAAH/A6oB/wMAAf8BqQEiARMB/wE2
AQsBCAH/AScBlgG1Af8BQAHBAeQB/wGUAdgB6wH/AQABGgGIAf8BAAENAS4B/wGhAQUBLQH/Ab8BGAGO
Af8BygEoAaYB/wHaATkBvAH/AegBgQHSAf8B9AGKAeEB/wH5AZAB6AH/AfQBigHhAf8B6AGBAdIB/wHa
ATkBvQH/AcsBKAGlAf8BwAEXAYoB/wFGAQQBIQH/AQABCwE7Af8BBwFFAakB/wGcAeEB7wH/ATIBsAHW
Af8BGgETARsB/wGQARcBCgH/AwcB/wOqAf8DAAH/AgABRwH/AQABFwGIAf8BEwGUAbQB/wIAATUB/wEA
AQcBigH/AQEBjAHPAf8BAQGTAdwB/wECAY8B1QH/AQABPwHDAf8BAAEZAaUB/wIAAYkB/wIAAUMB/wIA
ATwB/wIAATwB/wIAATwB/wIAATwB/wIAATwB/wIAATwB/wIAATwB/wIAATwB/wIAAT4B/wIAAUYB/wEA
AQEBjgH/AQABNwG4Af8BFQGaAdIB/wEMAY0BywH/AQABHgGlAf8CAAE/Af8CAAE1Af8BEwGXAbYB/wEA
ARsBigH/AgABRwH/EAADAwEEAxYBHgM2AVkBTwJRAZwBVwJZAb8BWQJcAckBWgJdAcoBXAJeAc4BWAJf
AeMBVwJiAfYB8AP/AcMB+wL/AcMB+wL/Ad0D/wFdAWkBbQH8A1kBxwM3AVsDDwEUAwABAU8AAf8DAAH/
AwAB/wMAAf8DAAH/DgAC/wIAAv8CAAL/AgAC/wIAAv8nAAH/A7AB/wMAAf8BrwEjARYB/wFFAQoBAgH/
ASgBBQEHAf8BIwE/AYUB/wGwAe4B9wH/AZsB4wHvAf8BAAEdAZEB/wEAARkBMgH/AaUBCQE1Af8BwAEc
AZUB/wHLASoBqQH/AdYBNQG3Af8B3gE/AcIB/wHhAUEBxgH/Ad4BPwHCAf8B1gE1AbcB/wHLASoBqAH/
AcMBGwGRAf8BgQEFAScB/wEAASMBgAH/AQABPQGlAf8BtwHzAfoB/wGWAdoB5AH/ARsBEAEYAf8BOwEJ
AQQB/wGjAR4BEwH/AwcB/wOwAf8DAAH/AgABRwH/AQABFwGIAf8BEwGUAbQB/wIAATUB/wEAARUBjwH/
ASEBxwHoAf8BKAHQAfMB/wEpAcsB8gH/AR8BuwHmAf8BCQGNAcwB/wEAASABpQH/AgABgQH/AgABPAH/
AgABPAH/AgABPAH/AgABPAH/AgABPAH/AgABPAH/AgABPAH/AgABPAH/AgABPAH/AgABRgH/AQABNQG1
Af8BKgHQAfEB/wE6AekB/QH/ATcB5QH7Af8BEwGpAdwB/wEAAQQBhAH/AQABAQE1Af8BEwGbAbgB/wEA
ARsBiwH/AgABRwH/EAADAgEDAwoBDQMcAScDLwFJAzwBZgNEAXoDSAGEAU4CTwGXAVkCXAHMAVMCZAHx
BP8BwwH7Av8BwwH7Av8B1wP/A6gB/QNbAcgDNwFaAwsBD1MAAf8DAAH/AwAB/wMAAf8DAAH/DgAC/wIA
Av8CAAL/AgAC/wIAAv8nAAH/A7YB/wMAAf8BsAEiARYB/wGyASIBFQH/AZ8BGQENAf8BRgEJAQAB/wEN
AQUBFAH/AZMB1AHoAf8BlgHeAe8B/wEAASwBlgH/AQUBEAEnAf8BuAENAUAB/wG/ARoBkwH/AcYBIwGg
Af8BywEpAaYB/wHNASsBqgH/AcsBKQGmAf8BxgEjAaAB/wHAARoBkQH/AZ0BCAExAf8BAAElAT8B/wEA
ATwBqAH/Aa8B6wH4Af8BOQGgAcMB/wErAgQB/wFIAQkBAAH/Aa0BIAETAf8BqQEgARUB/wMHAf8DtgH/
AwAB/wIAAUcB/wEAARcBiAH/ARIBlAG0Af8CAAE1Af8BAAEQAY4B/wEaAcMB5wH/ASEBzgHyAf8BIQHI
AfIB/wEXAbQB5gH/AQQBigHKAf8BAAEeAZ8B/wIAAUIB/wIAATMB/wIAATEB/wIAATEB/wIAATEB/wIA
ATEB/wIAATEB/wIAATEB/wIAATEB/wIAATIB/wIAAUAB/wELAZUBywH/AS8B6QH9Af8BMQHuAv8BMQHu
Av8BIwHVAfAB/wEAAREBkAH/AQABAgE1Af8BEwGcAbkB/wEAARsBiwH/AgABRwH/EwABAQMHAQkDFgEf
Ay8BSQFBAkIBcwFMAk0BkQFQAlIBowFVAlcBugNfAeABSQJiAfYB8wP/AcMB+wL/AcMB+wL/Ad0D/wFd
AWkBbQH8AVcCWgG9AzEBTwMJAQxTAAH/AwAB/wMAAf8DAAH/AwAB/w4AAv8CAAL/AgAC/wIAAv8CAAL/
JwAB/wO7Af8DAAH/Aa0BHwEVAf8BswEhARYB/wGzASEBFgH/AagBHAERAf8BRQEGAQAB/wENAQUBFAH/
AZEB0QHqAf8BRAG6Ad0B/wEAATUBkwH/AS4BAgEdAf8BuAELAUMB/wG8ARMBhwH/AcABFQGKAf8BvwEW
AYwB/wHAARUBigH/AbwBEgGGAf8BtAEKATsB/wEBARMBKAH/AQABOwGiAf8BnQHeAfEB/wE5AaABxgH/
AS0BAwEEAf8BlgETAQoB/wGyASEBFgH/AbMBIQEWAf8BpgEdARQB/wMIAf8DuwH/AwAB/wIAAUcB/wEA
ARcBiAH/AQ4BlAG0Af8CAAE1Af8BAAECAYUB/wEAAYIBygH/AQABjgHXAf8BAAGKAdcB/wEAAYYBzwH/
AQABPwHAAf8BAAEmAaoB/wEAAQcBjAH/AgABLgH/AgABKAH/AgABKAH/AgABKAH/AgABKAH/AgABKAH/
AgABKAH/AgABKgH/AgABLAH/AgABPAH/AQEBgAHBAf8BJAHjAfsB/wEoAe4C/wEoAe4C/wEVAcYB6gH/
AQABCQGMAf8BAAECATcB/wETAZ0BvQH/AQABHAGLAf8CAAFHAf8TAAEBAwoBDQMqAUABTgJPAZcBWAJc
AdEDXAHqA2cB8gNZAfUCXwFkAfsB2gHqAfUB/wHYA/8BwwH7Av8BxQH9Av8B7wP/A2IB9gFQAlIBowMn
AToDBwEJUwAB/wMAAf8DAAH/AwAB/wMAAf8OAAL/AgAC/wIAAv8CAAL/AgAC/ycAAf8DwAH/AwAB/wGp
AR0BEwH/Aa8BHgEUAf8BrwEeARQB/wGvAR4BFAH/AaUBGQEQAf8BQQEEAQAB/wEOARcBLAH/AZgB2gHx
Af8BGgGPAbwB/wEAASABPAH/AT0BAAEOAf8BMQEEAR8B/wEgAQoBJQH/ASABCgElAf8BJAEJASQB/wE5
AQABGwH/AScBAAEMAf8BAAEwAZAB/wFIAbwB4AH/AYQBuwHhAf8BHwEBAQcB/wGRARABBwH/Aa8BHgEU
Af8BrwEeARQB/wGvAR4BFAH/AaIBGwESAf8DCAH/A8AB/wMAAf8CAAFIAf8BAAEXAYsB/wERAZQBtAH/
AgABMQH/AQABEAGMAf8BGQHaAesB/wEeAeQB9QH/AR4B4gH1Af8BGQHZAfMB/wETAcIB6QH/AQQBkwHR
Af8BAAEgAaMB/wIAASUB/wIAAR4B/wIAAR4B/wIAAR4B/wIAAR4B/wIAAR4B/wIAAR4B/wIAASEB/wIA
ASEB/wIAASkB/wEAAQ8BkAH/AQUBngHWAf8BGQHRAfAB/wETAcMB6gH/AQABQAG9Af8CAAE+Af8CAAE3
Af8BEwGdAb0B/wEAARwBjgH/AgABSAH/EwABAQMPARQDOwFjA14B2AT/AfsD/wHzA/8B7gP/AeID/wHR
A/8BxgH+Av8BxAH8Av8B1gP/AecB8QH4Af8BVwJcAd8DRAF5AxgBIgMEAQZTAAH/AwAB/wMAAf8DAAH/
AwAB/w4AAv8CAAL/AgAC/wIAAv8CAAL/JwAB/wPHAf8DAAH/AaYBGQESAf8BrAEaARMB/wGsARoBEwH/
AawBGgETAf8BrAEaARMB/wGaARIBCwH/ATgBAgEAAf8BKwGQAbIB/wGWAdIB8QH/AQABMwGiAf8BAAEs
AYsB/wEAATQBkwH/AQABOgGaAf8BAAE8AZwB/wEAATkBlwH/AQABNAGTAf8BAAEnAYsB/wEVAYkBuwH/
AZgB2AHzAf8BDwEdATMB/wFAAQIBAAH/AasBGQESAf8BrAEaARMB/wGsARoBEwH/AawBGgETAf8BnwEY
AREB/wMIAf8DxwH/AwAB/wIAAYUB/wEAAR4BjQH/ARMBlwG0Af8CAAEvAf8CAAEwAf8BAAEUAYwB/wEA
ARYBkgH/AQABFgGSAf8BAAEUAZAB/wEAAQ8BhgH/AQABAgFCAf8CAAEyAf8CAAEbAf8CAAEVAf8CAAEV
Af8CAAEVAf8CAAEVAf8CAAEVAf8CAAEVAf8CAAEVAf8CAAEbAf8CAAEcAf8CAAEnAf8CAAFCAf8BAAEQ
AYoB/wEAAQgBhQH/AgABOwH/AgABKAH/AgABMAH/ARMBnAG5Af8BAAEfAZEB/wIAAYUB/xMAAQEDDQES
AzgBXAFYAlsBywJ/AYQB/gHqA/8BzQP/AcQB/AL/AcMB+wL/AcMB+wL/AcYB/gL/AdgD/wHzAfgB/AH/
A10B8ANSAakDLgFHAwwBEAMCAQNTAAH/AwAB/wMAAf8DAAH/AwAB/0cAAf8DzwH/AwAB/wGjARYBEAH/
AagBFwERAf8BqAEXAREB/wGoARcBEQH/AagBFwERAf8BqAEXAREB/wGNAQoBBQH/ARMBBQEQAf8BjAHS
AfMB/wHDAfAB+AH/AdUB7gH3Af8B4AH3AfwB/wHnA/8B6AP/AeYB/gL/Ad0B8gH6Af8BzQHtAfcB/wG1
Ae8B+wH/ATkBqwHPAf8BLgIAAf8BlgEPAQkB/wGoARcBEQH/AagBFwERAf8BqAEXAREB/wGoARcBEQH/
AZ0BFQEPAf8DCQH/A88B/wMAAf8CAAGKAf8BAAEhAZgB/wEUAZUBtgH/AQABJQGIAf8CAAEuAf8CAAEz
Af8CAAEzAf8CAAEzAf8CAAEtAf8CAAEtAf8CAAEtAf8CAAEoAf8CAAEnAf8CAAEnAf8CAAEnAf8CAAEn
Af8CAAEnAf8CAAEnAf8CAAEnAf8CAAEnAf8CAAEoAf8CAAEuAf8CAAEvAf8CAAEvAf8CAAE1Af8CAAE1
Af8CAAE0Af8CAAEuAf8BAAElAYcB/wETAZQBtQH/AQABIQGYAf8CAAGKAf8TAAEBAwcBCgMmATgDSgGL
AVkCXAHPA1wB+AHzAfgB/AH/AfID/wHmA/8B6AP/AfoD/wJ/AYgB/gNhAe4DVQGyAzgBXAMVAR0DBQEH
AwABAVMAAf8DAAH/AwAB/wMAAf8DAAH/RwAB/wPXAf8DAAH/AZ8BEwEPAf8BpAEUARAB/wGkARQBEAH/
AaQBFAEQAf8BpAEUARAB/wGkARQBEAH/AZkBDwELAf8BKAIAAf8BrwHcAeQB/wHiAfAB8gH/AY0BpAGv
Af8BLAEyAT4B/wEaARYBJAH/ARsBFwElAf8BHQEaAScB/wE3AUMBhgH/AaUBwAHFAf8B7wL7Af8BIwGC
AZcB/wE5AgAB/wGjARMBDwH/AaQBFAEQAf8BpAEUARAB/wGkARQBEAH/AaQBFAEQAf8BmQESAQ4B/wMJ
Af8D1wH/AwAB/wIAAZQB/wEAARwBmwH/AR8BogHDAf8BMgG3Ac0B/wEuAbkBzQH/AS4BuQHNAf8BLAG5
Ac0B/wErAbkBzQH/ASsBuQHNAf8BKwG5Ac0B/wErAbkBzQH/ASsBuQHNAf8BKwG5Ac0B/wErAbkBzQH/
ASsBuQHNAf8BKwG5Ac0B/wErAbkBzQH/ASsBuQHNAf8BKwG5Ac0B/wErAbkBzQH/AS4BuQHNAf8BLgG8
Ac8B/wEuAb8B0gH/AS4BvwHSAf8BLgG/AdIB/wEuAb8B0gH/ASwBvAHPAf8BKwG5Ac0B/wEqAbYByAH/
ARoBngHAAf8BAAEbAZsB/wIAAZQB/xQAAwQBBQMRARcDKQE/A0QBeQFVAlYBtAFcAmEB3ANfAfMBTQFa
AWQB+gFNAVoBZAH6A10B7QFbAl4B0AFQAlEBnwM2AVkDGAEhAwcBCgMBAQJXAAH/AwAB/wMAAf8DAAH/
AwAB/0cAAf8D3wH/AwAB/wGcARABDgH/AaEBEQEPAf8BoQERAQ8B/wGhAREBDwH/AaEBEQEPAf8BoQER
AQ8B/wGbAQ4BDAH/AS4CAAH/AY8BlgGhAf8BHAEAAQEB/wE2AgAB/wE5AgAB/wGBAQMBAQH/AYEBAwEB
Af8BgQEDAQEB/wE4AgAB/wEzAgAB/wEQAQQBEwH/AUABRAGIAf8BOAIAAf8BoAEQAQ4B/wGhAREBDwH/
AaEBEQEPAf8BoQERAQ8B/wGhAREBDwH/AZYBDwENAf8DCgH/A98B/wMAAf8CAAGeAf8BAAECAZQB/wEK
ASQBnwH/AR0BRAGuAf8BIAFIAasB/wEgAUgBqwH/AR4BSAGrAf8BHQFIAacB/wEdAUgBpgH/ARsBRQGm
Af8BFwFCAaYB/wEXAUIBogH/ARcBQgGhAf8BFwFCAaEB/wEXAUIBoQH/ARcBQgGhAf8BFwFCAaEB/wEX
AUIBoQH/ARcBQgGhAf8BFwFCAaEB/wEbAUIBogH/ARsBQgGmAf8BHgFFAaYB/wEgAUgBpgH/ASABSAGn
Af8BIAFIAasB/wEeAUgBqwH/AR0BSAGrAf8BGgFEAa4B/wEIASQBnwH/AQABAgGUAf8CAAGeAf8XAAEB
AwQBBgMMARADHAEoAzEBTQNCAXUDTgGZAVMCVQGtA1IBqQNLAY4BPAI9AWcDKQE+AxQBGwMHAQkDAgED
WwAB/wMAAf8DAAH/AwAB/wMAAf9EAANMAfMD3wH/AxcB/wGKAgoB/wGbAQwBDQH/AZsBDAENAf8BmwEM
AQ0B/wGbAQwBDQH/AZsBDAENAf8BmgELAQwB/wEzAgAB/wEtAgAB/wE1AgAB/wGZAQsBDAH/AZoBDAEN
Af8BmwEMAQ0B/wGbAQwBDQH/AZsBDAENAf8BmgELAQwB/wGSAQgBCQH/ATQCAAH/ASoCAAH/ATUCAAH/
AZoBDAENAf8BmwEMAQ0B/wGbAQwBDQH/AZsBDAENAf8BmwEMAQ0B/wFFAQgBCQH/Ax8B/wPdAf8DTgHw
AgABpAH/AgABngH/AgABlAH/AgABjwH/AgABjAH/AgABhgH/AgABggH/AgABRwH/AgABRwH/AgABRAH/
AgABQQH/AgABPwH/AgABPwH/AgABPwH/AgABPwH/AgABPwH/AgABPwH/AgABPwH/AgABPwH/AgABPwH/
AgABPwH/AgABQQH/AgABRAH/AgABRwH/AgABRwH/AgABggH/AgABhgH/AgABjAH/AgABjwH/AgABlAH/
AgABngH/AgABpAH/GwABAQMCAQMDBgEIAwwBEAMWAR4DIgEyAyoBQAMpAT4DHwEsAxIBGQMKAQ0DBAEG
AwEBAl8AAf8DAAH/AwAB/wMAAf8DAAH/RAADVwG9A78B/wOUAf8BKwEJAQsB/wGKAQgBDgH/AZMBBgEN
Af8BkwEGAQ0B/wGTAQYBDQH/AZMBBgENAf8BkwEGAQ0B/wGSAQYBDAH/AY4BBAELAf8BkgEGAQ0B/wGT
AQYBDQH/AZMBBgENAf8BkwEGAQ0B/wGTAQYBDQH/AZMBBgENAf8BkwEGAQ0B/wGTAQYBDQH/AZIBBgEM
Af8BjQEEAQoB/wGSAQYBDQH/AZMBBgENAf8BkwEGAQ0B/wGTAQYBDQH/AZMBBgENAf8BgAEJAQ4B/wEg
AQgBCgH/A7QB/wO0Af8DVAGuAgIBrAH/AgIBqQH/AgIBpgH/AgABpgH/AgABpgH/AgABowH/AgABnwH/
AgABngH/AgABlwH/AgABlwH/AgABlgH/AgABlgH/AgABjgH/AgABjgH/AgABjgH/AgABjgH/AgABjgH/
AgABjgH/AgABjgH/AgABjgH/AgABlgH/AgABlgH/AgABlwH/AgABlwH/AgABngH/AgABnwH/AgABowH/
AgABpgH/AgABpgH/AgIBpgH/AgIBqQH/AgIBrAH/JAADAQECAwMEBAQGAQgDBgEIAwQBBgMDAQQDAAEB
ZwAB/wMAAf8DAAH/AwAB/wMAAf9EAAM0AVQDLwH/A+4B/wOTAf8DFgH/AwAB/wMAAf8DAAH/AwAB/wMA
Af8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMA
Af8DAAH/AwAB/wMfAf8DsgH/A+oB/wMfAf8DLQFFAgIBrAH/AgIBrAH/AgIBrAH/AgIBrAH/AgIBrAH/
AgIBrAH/AgIBrAH/AgABqAH/AgABpAH/AgABogH/AgABnwH/AgABnwH/AgABnAH/AgABnAH/AgABnAH/
AgABnAH/AgABnAH/AgABnAH/AgABnAH/AgABnAH/AgABnwH/AgABnwH/AgABogH/AgABpwH/AgABqAH/
AgIBrAH/AgIBrAH/AgIBrAH/AgIBrAH/AgIBrAH/AgIBrAH/AgIBrAH//wAFAANKAY0DLgH/A80B/wP5
Af8D+wH/A/sB/wP7Af8D+wH/A/sB/wP7Af8D+wH/A/sB/wP7Af8D+wH/A/sB/wP7Af8D+wH/A/sB/wP7
Af8D+wH/A/sB/wP7Af8D+wH/A/sB/wP7Af8D+wH/A+sB/wO9Af8DGQH/A0gBhwQAA0gBhQICAawB/wIC
AawB/wICAawB/wICAawB/wICAawB/wICAawB/wICAawB/wIBAakB/wIAAakB/wIAAaYB/wIAAaQB/wIA
AaEB/wIAAaEB/wIAAaEB/wIAAaEB/wIAAaEB/wIAAaEB/wIAAaEB/wIAAaEB/wIAAaQB/wIAAaYB/wIA
AakB/wIBAasB/wICAawB/wICAawB/wICAawB/wICAawB/wICAawB/wICAawB/wICAawB/wNIAYX/AAkA
AzcBWgNZAcMDKwH8AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/
AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wNVAeoDVAGuAy0BRQgAAwcBCgNI
AYUCAgGsAf8CAgGsAf8CAgGsAf8CAgGsAf8CAgGsAf8CAgGsAf8CAgGsAf8CAgGsAf8CAgGrAf8CAQGq
Af8CAAGqAf8CAAGoAf8CAAGkAf8CAAGkAf8CAAGkAf8CAAGkAf8CAAGoAf8CAAGqAf8CAQGqAf8CAgGr
Af8CAgGsAf8CAgGsAf8CAgGsAf8CAgGsAf8CAgGsAf8CAgGsAf8CAgGsAf8CAgGsAf8DSAGFAwcBCv8A
AQABQgFNAT4HAAE+AwABKAMAAYADAAFAAwABAQEAAQEGAAEEFgAD//8A/wADAAHAAgABAwQACP8BgAIA
AQEEAAL/AfgBBwT/CAAC/wHwAQME/wgAAv8B4AEBAf8BwQL/CAAC/wHAAQEB/wHBAv8IAAL/AYABAQH/
AcEC/wgAAv8BAAEBAf8BwQL/CAAB/wH+AQABAQH/AcEC/wgAAf8B/AEAAQEB/wLBAf8IAAH/AfwBAAEB
Af8CwQH/CAAB/wGAAQABAQH/AsEB/wgAAf4CAAEBAf8CwQH/CAAB+AIAAQMB/wLBAf8IAAHwAgABBwHg
AQEBwAEHCAAB8AIAAR8B4AEBAcABBwgAAfACAAE/AeABAQHAAQcIAAHwAgABfwHgAQEBwAEHCAAB8AIA
Af8B4AEBAcABBwgAAfABAAEBAv8CwQH/CAAB8AEAAQMC/wLBAf8IAAHwAQABAwL/AsEB/wgAAfABAAED
Av8CwQH/CAAB8AEAAQMC/wLBAf8IAAHwAQABAwL/AcEC/wgAAfABAAEDAv8BwQL/CAAB+AEAAQcC/wHB
Av8IAAH4AQABDwL/AcEC/wgAAfwBAAEfAv8BwQL/CAAB/wGAAX8C/wHBAv8IAAj/AYACAAEBBAAI/wHA
AgABAwQACP8L
</value>
</data>
</root>

132
Tab/LogForm.Designer.cs generated Normal file
View file

@ -0,0 +1,132 @@

namespace DutyContent.Tab
{
partial class LogForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.pnlBase = new System.Windows.Forms.Panel();
this.txtLogText = new System.Windows.Forms.RichTextBox();
this.chkLogScroll = new System.Windows.Forms.CheckBox();
this.btnLogClear = new System.Windows.Forms.Button();
this.btnLogCopy = new System.Windows.Forms.Button();
this.pnlBase.SuspendLayout();
this.SuspendLayout();
//
// pnlBase
//
this.pnlBase.Controls.Add(this.txtLogText);
this.pnlBase.Controls.Add(this.chkLogScroll);
this.pnlBase.Controls.Add(this.btnLogClear);
this.pnlBase.Controls.Add(this.btnLogCopy);
this.pnlBase.Dock = System.Windows.Forms.DockStyle.Fill;
this.pnlBase.Location = new System.Drawing.Point(0, 0);
this.pnlBase.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.pnlBase.Name = "pnlBase";
this.pnlBase.Size = new System.Drawing.Size(804, 451);
this.pnlBase.TabIndex = 0;
//
// txtLogText
//
this.txtLogText.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.txtLogText.BackColor = System.Drawing.Color.AliceBlue;
this.txtLogText.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.txtLogText.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.txtLogText.Location = new System.Drawing.Point(4, 4);
this.txtLogText.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.txtLogText.Name = "txtLogText";
this.txtLogText.ReadOnly = true;
this.txtLogText.Size = new System.Drawing.Size(796, 407);
this.txtLogText.TabIndex = 3;
this.txtLogText.Text = "";
//
// chkLogScroll
//
this.chkLogScroll.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.chkLogScroll.AutoSize = true;
this.chkLogScroll.Location = new System.Drawing.Point(740, 421);
this.chkLogScroll.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.chkLogScroll.Name = "chkLogScroll";
this.chkLogScroll.Size = new System.Drawing.Size(51, 22);
this.chkLogScroll.TabIndex = 2;
this.chkLogScroll.Text = "503";
this.chkLogScroll.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
this.chkLogScroll.UseVisualStyleBackColor = true;
//
// btnLogClear
//
this.btnLogClear.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.btnLogClear.Location = new System.Drawing.Point(191, 415);
this.btnLogClear.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.btnLogClear.Name = "btnLogClear";
this.btnLogClear.Size = new System.Drawing.Size(166, 32);
this.btnLogClear.TabIndex = 1;
this.btnLogClear.Text = "502";
this.btnLogClear.UseVisualStyleBackColor = true;
this.btnLogClear.Click += new System.EventHandler(this.BtnLogClear_Click);
//
// btnLogCopy
//
this.btnLogCopy.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.btnLogCopy.Location = new System.Drawing.Point(4, 415);
this.btnLogCopy.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.btnLogCopy.Name = "btnLogCopy";
this.btnLogCopy.Size = new System.Drawing.Size(166, 32);
this.btnLogCopy.TabIndex = 0;
this.btnLogCopy.Text = "501";
this.btnLogCopy.UseVisualStyleBackColor = true;
this.btnLogCopy.Click += new System.EventHandler(this.BtnLogCopy_Click);
//
// LogForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 18F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.AutoScroll = true;
this.ClientSize = new System.Drawing.Size(804, 451);
this.Controls.Add(this.pnlBase);
this.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.MinimumSize = new System.Drawing.Size(640, 200);
this.Name = "LogForm";
this.Text = "Log";
this.pnlBase.ResumeLayout(false);
this.pnlBase.PerformLayout();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Panel pnlBase;
private System.Windows.Forms.CheckBox chkLogScroll;
private System.Windows.Forms.Button btnLogClear;
private System.Windows.Forms.Button btnLogCopy;
private System.Windows.Forms.RichTextBox txtLogText;
}
}

139
Tab/LogForm.cs Normal file
View file

@ -0,0 +1,139 @@
using System;
using System.Drawing;
using System.Windows.Forms;
namespace DutyContent.Tab
{
public partial class LogForm : Form, Interface.ISuppLocale, Interface.ISuppActPlugin
{
private static LogForm _self;
public static LogForm Self => _self;
public LogForm()
{
_self = this;
InitializeComponent();
}
public void PluginDeinitialize()
{
}
public void PluginInitialize()
{
chkLogScroll.Checked = true;
}
public void RefreshLocale()
{
}
public void UpdateUiLocale()
{
btnLogCopy.Text = Locale.Text(501);
btnLogClear.Text = Locale.Text(502);
chkLogScroll.Text = Locale.Text(503);
var logfont = new Font(DcConfig.Duty.LogFontFamily, DcConfig.Duty.LogFontSize, FontStyle.Regular);
txtLogText.Font = logfont;
}
private void BtnLogCopy_Click(object sender, EventArgs e)
{
try
{
if (txtLogText.SelectionLength != 0)
txtLogText.Copy();
else
{
txtLogText.SelectAll();
txtLogText.Copy();
txtLogText.SelectionStart = txtLogText.TextLength;
txtLogText.SelectionLength = 0;
}
}
catch (Exception ex)
{
Logger.Ex(ex, 35);
}
}
private void BtnLogClear_Click(object sender, EventArgs e)
{
try
{
txtLogText.Clear();
}
catch (Exception ex)
{
Logger.Ex(ex, 36);
}
}
private void InvokeLog(Color color, string mesg)
{
WorkerAct.Invoker(() =>
{
txtLogText.SelectionColor = color;
txtLogText.SelectionStart = txtLogText.TextLength;
txtLogText.SelectionLength = 0;
txtLogText.AppendText(mesg);
txtLogText.SelectionColor = txtLogText.ForeColor;
if (chkLogScroll.Checked)
ThirdParty.NativeMethods.ScrollToBottom(txtLogText);
});
}
//
public void WriteLog(Color color, string mesg, bool with_time = true)
{
if (txtLogText.IsDisposed || string.IsNullOrEmpty(mesg))
return;
string line;
if (!with_time)
line = mesg + Environment.NewLine;
else
{
var dt = DateTime.Now.ToString("HH:mm:ss");
line = $"[{dt}] {mesg}{Environment.NewLine}";
}
InvokeLog(color, line);
}
//
public void WriteLogSection(Color color, string section, string mesg, bool with_time = true)
{
if (txtLogText.IsDisposed || string.IsNullOrEmpty(mesg))
return;
string line;
if (!with_time)
line = $"[{section}] {mesg}{Environment.NewLine}";
else
{
var dt = DateTime.Now.ToString("HH:mm:ss");
line = $"[{dt}/{section}] {mesg}{Environment.NewLine}";
}
InvokeLog(color, line);
}
//
public Font LogFont
{
get { return txtLogText.Font; }
set { txtLogText.Font = value; }
}
}
}

120
Tab/LogForm.resx Normal file
View file

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

208
Tab/PingForm.Designer.cs generated
View file

@ -30,6 +30,10 @@ namespace DutyContent.Tab
private void InitializeComponent()
{
this.panel6 = new System.Windows.Forms.Panel();
this.cboPingGraphType = new System.Windows.Forms.ComboBox();
this.lblPingGraphType = new System.Windows.Forms.Label();
this.lstPingAddress = new System.Windows.Forms.ListBox();
this.lblPingAddress = new System.Windows.Forms.Label();
this.cboPingDefAddr = new System.Windows.Forms.ComboBox();
this.lblPingDefAddr = new System.Windows.Forms.Label();
this.pbxPingGraph = new System.Windows.Forms.PictureBox();
@ -46,8 +50,7 @@ namespace DutyContent.Tab
this.lblPingColors = new System.Windows.Forms.Label();
this.chkUsePing = new System.Windows.Forms.CheckBox();
this.panelDock = new System.Windows.Forms.Panel();
this.lblPingAddress = new System.Windows.Forms.Label();
this.lstPingAddress = new System.Windows.Forms.ListBox();
this.chkPingShowLoss = new System.Windows.Forms.CheckBox();
this.panel6.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pbxPingGraph)).BeginInit();
this.tlpnPingColors.SuspendLayout();
@ -60,6 +63,9 @@ namespace DutyContent.Tab
| System.Windows.Forms.AnchorStyles.Right)));
this.panel6.AutoScroll = true;
this.panel6.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.panel6.Controls.Add(this.chkPingShowLoss);
this.panel6.Controls.Add(this.cboPingGraphType);
this.panel6.Controls.Add(this.lblPingGraphType);
this.panel6.Controls.Add(this.lstPingAddress);
this.panel6.Controls.Add(this.lblPingAddress);
this.panel6.Controls.Add(this.cboPingDefAddr);
@ -69,51 +75,107 @@ namespace DutyContent.Tab
this.panel6.Controls.Add(this.tlpnPingColors);
this.panel6.Controls.Add(this.lblPingColors);
this.panel6.Controls.Add(this.chkUsePing);
this.panel6.Location = new System.Drawing.Point(12, 12);
this.panel6.Location = new System.Drawing.Point(0, 0);
this.panel6.Margin = new System.Windows.Forms.Padding(4);
this.panel6.Name = "panel6";
this.panel6.Size = new System.Drawing.Size(776, 399);
this.panel6.Size = new System.Drawing.Size(804, 377);
this.panel6.TabIndex = 2;
//
// cboPingGraphType
//
this.cboPingGraphType.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.cboPingGraphType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cboPingGraphType.FormattingEnabled = true;
this.cboPingGraphType.Items.AddRange(new object[] {
"Linear",
"Curved"});
this.cboPingGraphType.Location = new System.Drawing.Point(529, 140);
this.cboPingGraphType.Margin = new System.Windows.Forms.Padding(4);
this.cboPingGraphType.Name = "cboPingGraphType";
this.cboPingGraphType.Size = new System.Drawing.Size(267, 26);
this.cboPingGraphType.TabIndex = 19;
this.cboPingGraphType.SelectedIndexChanged += new System.EventHandler(this.CboPingGraphType_SelectedIndexChanged);
//
// lblPingGraphType
//
this.lblPingGraphType.AutoSize = true;
this.lblPingGraphType.Location = new System.Drawing.Point(513, 118);
this.lblPingGraphType.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lblPingGraphType.Name = "lblPingGraphType";
this.lblPingGraphType.Size = new System.Drawing.Size(32, 18);
this.lblPingGraphType.TabIndex = 18;
this.lblPingGraphType.Text = "410";
//
// lstPingAddress
//
this.lstPingAddress.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.lstPingAddress.FormattingEnabled = true;
this.lstPingAddress.ItemHeight = 18;
this.lstPingAddress.Location = new System.Drawing.Point(160, 327);
this.lstPingAddress.Margin = new System.Windows.Forms.Padding(4);
this.lstPingAddress.Name = "lstPingAddress";
this.lstPingAddress.ScrollAlwaysVisible = true;
this.lstPingAddress.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended;
this.lstPingAddress.Size = new System.Drawing.Size(636, 40);
this.lstPingAddress.TabIndex = 17;
this.lstPingAddress.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.LstPingAddress_MouseDoubleClick);
//
// lblPingAddress
//
this.lblPingAddress.AutoSize = true;
this.lblPingAddress.Location = new System.Drawing.Point(34, 327);
this.lblPingAddress.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lblPingAddress.Name = "lblPingAddress";
this.lblPingAddress.Size = new System.Drawing.Size(32, 18);
this.lblPingAddress.TabIndex = 16;
this.lblPingAddress.Text = "409";
//
// cboPingDefAddr
//
this.cboPingDefAddr.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.cboPingDefAddr.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cboPingDefAddr.FormattingEnabled = true;
this.cboPingDefAddr.Location = new System.Drawing.Point(518, 51);
this.cboPingDefAddr.Location = new System.Drawing.Point(529, 78);
this.cboPingDefAddr.Margin = new System.Windows.Forms.Padding(4);
this.cboPingDefAddr.Name = "cboPingDefAddr";
this.cboPingDefAddr.Size = new System.Drawing.Size(253, 21);
this.cboPingDefAddr.Size = new System.Drawing.Size(267, 26);
this.cboPingDefAddr.TabIndex = 15;
this.cboPingDefAddr.SelectedIndexChanged += new System.EventHandler(this.CboPingDefAddr_SelectedIndexChanged);
//
// lblPingDefAddr
//
this.lblPingDefAddr.AutoSize = true;
this.lblPingDefAddr.Location = new System.Drawing.Point(515, 35);
this.lblPingDefAddr.Location = new System.Drawing.Point(513, 58);
this.lblPingDefAddr.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lblPingDefAddr.Name = "lblPingDefAddr";
this.lblPingDefAddr.Size = new System.Drawing.Size(25, 13);
this.lblPingDefAddr.Size = new System.Drawing.Size(32, 18);
this.lblPingDefAddr.TabIndex = 14;
this.lblPingDefAddr.Text = "335";
this.lblPingDefAddr.Text = "408";
//
// pbxPingGraph
//
this.pbxPingGraph.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.pbxPingGraph.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.pbxPingGraph.Location = new System.Drawing.Point(129, 108);
this.pbxPingGraph.Location = new System.Drawing.Point(160, 174);
this.pbxPingGraph.Margin = new System.Windows.Forms.Padding(4);
this.pbxPingGraph.Name = "pbxPingGraph";
this.pbxPingGraph.Size = new System.Drawing.Size(642, 186);
this.pbxPingGraph.Size = new System.Drawing.Size(637, 145);
this.pbxPingGraph.TabIndex = 13;
this.pbxPingGraph.TabStop = false;
//
// chkPingGraph
//
this.chkPingGraph.AutoSize = true;
this.chkPingGraph.Location = new System.Drawing.Point(26, 108);
this.chkPingGraph.Location = new System.Drawing.Point(37, 174);
this.chkPingGraph.Margin = new System.Windows.Forms.Padding(4);
this.chkPingGraph.Name = "chkPingGraph";
this.chkPingGraph.Size = new System.Drawing.Size(44, 17);
this.chkPingGraph.Size = new System.Drawing.Size(51, 22);
this.chkPingGraph.TabIndex = 12;
this.chkPingGraph.Text = "334";
this.chkPingGraph.Text = "407";
this.chkPingGraph.UseVisualStyleBackColor = true;
this.chkPingGraph.CheckedChanged += new System.EventHandler(this.ChkPingGraph_CheckedChanged);
//
@ -132,33 +194,36 @@ namespace DutyContent.Tab
this.tlpnPingColors.Controls.Add(this.lblPingStat4, 3, 0);
this.tlpnPingColors.Controls.Add(this.btnPingColor1, 0, 1);
this.tlpnPingColors.Controls.Add(this.lblPingStat3, 2, 0);
this.tlpnPingColors.Location = new System.Drawing.Point(129, 35);
this.tlpnPingColors.Location = new System.Drawing.Point(160, 58);
this.tlpnPingColors.Margin = new System.Windows.Forms.Padding(4);
this.tlpnPingColors.Name = "tlpnPingColors";
this.tlpnPingColors.Padding = new System.Windows.Forms.Padding(3);
this.tlpnPingColors.Padding = new System.Windows.Forms.Padding(4);
this.tlpnPingColors.RowCount = 2;
this.tlpnPingColors.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 40F));
this.tlpnPingColors.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 60F));
this.tlpnPingColors.Size = new System.Drawing.Size(318, 62);
this.tlpnPingColors.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 36.53846F));
this.tlpnPingColors.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 63.46154F));
this.tlpnPingColors.Size = new System.Drawing.Size(325, 60);
this.tlpnPingColors.TabIndex = 11;
//
// lblPingStat1
//
this.lblPingStat1.AutoSize = true;
this.lblPingStat1.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblPingStat1.Location = new System.Drawing.Point(6, 3);
this.lblPingStat1.Location = new System.Drawing.Point(8, 4);
this.lblPingStat1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lblPingStat1.Name = "lblPingStat1";
this.lblPingStat1.Size = new System.Drawing.Size(72, 22);
this.lblPingStat1.Size = new System.Drawing.Size(71, 18);
this.lblPingStat1.TabIndex = 6;
this.lblPingStat1.Text = "330";
this.lblPingStat1.Text = "403";
this.lblPingStat1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// btnPingColor4
//
this.btnPingColor4.BackColor = System.Drawing.Color.Plum;
this.btnPingColor4.Dock = System.Windows.Forms.DockStyle.Fill;
this.btnPingColor4.Location = new System.Drawing.Point(240, 28);
this.btnPingColor4.Location = new System.Drawing.Point(245, 26);
this.btnPingColor4.Margin = new System.Windows.Forms.Padding(4);
this.btnPingColor4.Name = "btnPingColor4";
this.btnPingColor4.Size = new System.Drawing.Size(72, 28);
this.btnPingColor4.Size = new System.Drawing.Size(72, 26);
this.btnPingColor4.TabIndex = 8;
this.btnPingColor4.UseVisualStyleBackColor = false;
this.btnPingColor4.Click += new System.EventHandler(this.BtnPingColor4_Click);
@ -167,9 +232,10 @@ namespace DutyContent.Tab
//
this.btnPingColor2.BackColor = System.Drawing.Color.Aqua;
this.btnPingColor2.Dock = System.Windows.Forms.DockStyle.Fill;
this.btnPingColor2.Location = new System.Drawing.Point(84, 28);
this.btnPingColor2.Location = new System.Drawing.Point(87, 26);
this.btnPingColor2.Margin = new System.Windows.Forms.Padding(4);
this.btnPingColor2.Name = "btnPingColor2";
this.btnPingColor2.Size = new System.Drawing.Size(72, 28);
this.btnPingColor2.Size = new System.Drawing.Size(71, 26);
this.btnPingColor2.TabIndex = 10;
this.btnPingColor2.UseVisualStyleBackColor = false;
this.btnPingColor2.Click += new System.EventHandler(this.BtnPingColor2_Click);
@ -178,9 +244,10 @@ namespace DutyContent.Tab
//
this.btnPingColor3.BackColor = System.Drawing.Color.LawnGreen;
this.btnPingColor3.Dock = System.Windows.Forms.DockStyle.Fill;
this.btnPingColor3.Location = new System.Drawing.Point(162, 28);
this.btnPingColor3.Location = new System.Drawing.Point(166, 26);
this.btnPingColor3.Margin = new System.Windows.Forms.Padding(4);
this.btnPingColor3.Name = "btnPingColor3";
this.btnPingColor3.Size = new System.Drawing.Size(72, 28);
this.btnPingColor3.Size = new System.Drawing.Size(71, 26);
this.btnPingColor3.TabIndex = 9;
this.btnPingColor3.UseVisualStyleBackColor = false;
this.btnPingColor3.Click += new System.EventHandler(this.BtnPingColor3_Click);
@ -189,31 +256,34 @@ namespace DutyContent.Tab
//
this.lblPingStat2.AutoSize = true;
this.lblPingStat2.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblPingStat2.Location = new System.Drawing.Point(84, 3);
this.lblPingStat2.Location = new System.Drawing.Point(87, 4);
this.lblPingStat2.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lblPingStat2.Name = "lblPingStat2";
this.lblPingStat2.Size = new System.Drawing.Size(72, 22);
this.lblPingStat2.Size = new System.Drawing.Size(71, 18);
this.lblPingStat2.TabIndex = 5;
this.lblPingStat2.Text = "331";
this.lblPingStat2.Text = "404";
this.lblPingStat2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// lblPingStat4
//
this.lblPingStat4.AutoSize = true;
this.lblPingStat4.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblPingStat4.Location = new System.Drawing.Point(240, 3);
this.lblPingStat4.Location = new System.Drawing.Point(245, 4);
this.lblPingStat4.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lblPingStat4.Name = "lblPingStat4";
this.lblPingStat4.Size = new System.Drawing.Size(72, 22);
this.lblPingStat4.Size = new System.Drawing.Size(72, 18);
this.lblPingStat4.TabIndex = 3;
this.lblPingStat4.Text = "333";
this.lblPingStat4.Text = "406";
this.lblPingStat4.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// btnPingColor1
//
this.btnPingColor1.BackColor = System.Drawing.Color.RoyalBlue;
this.btnPingColor1.Dock = System.Windows.Forms.DockStyle.Fill;
this.btnPingColor1.Location = new System.Drawing.Point(6, 28);
this.btnPingColor1.Location = new System.Drawing.Point(8, 26);
this.btnPingColor1.Margin = new System.Windows.Forms.Padding(4);
this.btnPingColor1.Name = "btnPingColor1";
this.btnPingColor1.Size = new System.Drawing.Size(72, 28);
this.btnPingColor1.Size = new System.Drawing.Size(71, 26);
this.btnPingColor1.TabIndex = 7;
this.btnPingColor1.UseVisualStyleBackColor = false;
this.btnPingColor1.Click += new System.EventHandler(this.BtnPingColor1_Click);
@ -222,31 +292,34 @@ namespace DutyContent.Tab
//
this.lblPingStat3.AutoSize = true;
this.lblPingStat3.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblPingStat3.Location = new System.Drawing.Point(162, 3);
this.lblPingStat3.Location = new System.Drawing.Point(166, 4);
this.lblPingStat3.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lblPingStat3.Name = "lblPingStat3";
this.lblPingStat3.Size = new System.Drawing.Size(72, 22);
this.lblPingStat3.Size = new System.Drawing.Size(71, 18);
this.lblPingStat3.TabIndex = 4;
this.lblPingStat3.Text = "332";
this.lblPingStat3.Text = "405";
this.lblPingStat3.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// lblPingColors
//
this.lblPingColors.AutoSize = true;
this.lblPingColors.Location = new System.Drawing.Point(23, 35);
this.lblPingColors.Location = new System.Drawing.Point(34, 58);
this.lblPingColors.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lblPingColors.Name = "lblPingColors";
this.lblPingColors.Size = new System.Drawing.Size(25, 13);
this.lblPingColors.Size = new System.Drawing.Size(32, 18);
this.lblPingColors.TabIndex = 2;
this.lblPingColors.Text = "329";
this.lblPingColors.Text = "402";
//
// chkUsePing
//
this.chkUsePing.AutoSize = true;
this.chkUsePing.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.chkUsePing.Location = new System.Drawing.Point(3, 3);
this.chkUsePing.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.chkUsePing.Location = new System.Drawing.Point(4, 4);
this.chkUsePing.Margin = new System.Windows.Forms.Padding(4);
this.chkUsePing.Name = "chkUsePing";
this.chkUsePing.Size = new System.Drawing.Size(58, 24);
this.chkUsePing.Size = new System.Drawing.Size(62, 28);
this.chkUsePing.TabIndex = 0;
this.chkUsePing.Text = "328";
this.chkUsePing.Text = "401";
this.chkUsePing.UseVisualStyleBackColor = true;
this.chkUsePing.CheckedChanged += new System.EventHandler(this.ChkUsePing_CheckedChanged);
//
@ -256,39 +329,33 @@ namespace DutyContent.Tab
this.panelDock.Controls.Add(this.panel6);
this.panelDock.Dock = System.Windows.Forms.DockStyle.Fill;
this.panelDock.Location = new System.Drawing.Point(0, 0);
this.panelDock.Margin = new System.Windows.Forms.Padding(4);
this.panelDock.Name = "panelDock";
this.panelDock.Size = new System.Drawing.Size(800, 450);
this.panelDock.Size = new System.Drawing.Size(804, 381);
this.panelDock.TabIndex = 3;
//
// lblPingAddress
// chkPingShowLoss
//
this.lblPingAddress.AutoSize = true;
this.lblPingAddress.Location = new System.Drawing.Point(23, 315);
this.lblPingAddress.Name = "lblPingAddress";
this.lblPingAddress.Size = new System.Drawing.Size(25, 13);
this.lblPingAddress.TabIndex = 16;
this.lblPingAddress.Text = "343";
//
// lstPingAddress
//
this.lstPingAddress.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.lstPingAddress.FormattingEnabled = true;
this.lstPingAddress.Location = new System.Drawing.Point(129, 309);
this.lstPingAddress.Name = "lstPingAddress";
this.lstPingAddress.ScrollAlwaysVisible = true;
this.lstPingAddress.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended;
this.lstPingAddress.Size = new System.Drawing.Size(642, 82);
this.lstPingAddress.TabIndex = 17;
this.chkPingShowLoss.AutoSize = true;
this.chkPingShowLoss.Location = new System.Drawing.Point(37, 140);
this.chkPingShowLoss.Margin = new System.Windows.Forms.Padding(4);
this.chkPingShowLoss.Name = "chkPingShowLoss";
this.chkPingShowLoss.Size = new System.Drawing.Size(51, 22);
this.chkPingShowLoss.TabIndex = 20;
this.chkPingShowLoss.Text = "413";
this.chkPingShowLoss.UseVisualStyleBackColor = true;
this.chkPingShowLoss.CheckedChanged += new System.EventHandler(this.ChkPingShowLoss_CheckedChanged);
//
// PingForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 18F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.AutoScroll = true;
this.ClientSize = new System.Drawing.Size(800, 450);
this.ClientSize = new System.Drawing.Size(804, 381);
this.Controls.Add(this.panelDock);
this.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.Margin = new System.Windows.Forms.Padding(4);
this.MinimumSize = new System.Drawing.Size(800, 39);
this.Name = "PingForm";
this.Text = "Ping";
this.panel6.ResumeLayout(false);
@ -322,5 +389,8 @@ namespace DutyContent.Tab
private System.Windows.Forms.Panel panelDock;
private System.Windows.Forms.Label lblPingAddress;
private System.Windows.Forms.ListBox lstPingAddress;
private System.Windows.Forms.ComboBox cboPingGraphType;
private System.Windows.Forms.Label lblPingGraphType;
private System.Windows.Forms.CheckBox chkPingShowLoss;
}
}

View file

@ -1,16 +1,10 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Threading;
using System.Net.NetworkInformation;
using DutyContent.Interface;
using System.Net;
namespace DutyContent.Tab
@ -23,10 +17,18 @@ namespace DutyContent.Tab
//
private System.Timers.Timer _timer;
private long _last_ping;
private Color _color = Color.Transparent;
private Libre.PingGrapher _grpr;
private List<int> _kepts = new List<int> { 0, 0 };
//
private const int PingInterval = 5000;
private const int PingAmount = 5;
private const int PingTimeout = PingInterval / (PingAmount + 1);
//
public PingForm()
{
_self = this;
@ -43,7 +45,9 @@ namespace DutyContent.Tab
btnPingColor2.BackColor = DcConfig.Duty.PingColors[1];
btnPingColor3.BackColor = DcConfig.Duty.PingColors[2];
btnPingColor4.BackColor = DcConfig.Duty.PingColors[3];
chkPingShowLoss.Checked = DcConfig.Duty.PingShowLoss;
chkPingGraph.Checked = DcConfig.Duty.PingGraph;
cboPingGraphType.SelectedIndex = DcConfig.Duty.PingGraphType;
//
try
@ -67,12 +71,12 @@ namespace DutyContent.Tab
catch
{
cboPingDefAddr.Items.Clear();
cboPingDefAddr.Items.Add(MesgLog.Text(27));
cboPingDefAddr.Items.Add(Locale.Text(27));
cboPingDefAddr.SelectedIndex = 0;
}
//
_timer = new System.Timers.Timer() { Interval = 5000 };
_timer = new System.Timers.Timer() { Interval = PingInterval };
_timer.Elapsed += (sender, e) => PingOnce();
if (DcConfig.Duty.UsePing)
@ -95,15 +99,17 @@ namespace DutyContent.Tab
public void UpdateUiLocale()
{
chkUsePing.Text = MesgLog.Text(328);
lblPingColors.Text = MesgLog.Text(329);
lblPingStat1.Text = MesgLog.Text(330);
lblPingStat2.Text = MesgLog.Text(331);
lblPingStat3.Text = MesgLog.Text(332);
lblPingStat4.Text = MesgLog.Text(333);
chkPingGraph.Text = MesgLog.Text(334);
lblPingDefAddr.Text = MesgLog.Text(335);
lblPingAddress.Text = MesgLog.Text(343);
chkUsePing.Text = Locale.Text(401);
lblPingColors.Text = Locale.Text(402);
lblPingStat1.Text = Locale.Text(403);
lblPingStat2.Text = Locale.Text(404);
lblPingStat3.Text = Locale.Text(405);
lblPingStat4.Text = Locale.Text(406);
chkPingGraph.Text = Locale.Text(407);
lblPingDefAddr.Text = Locale.Text(408);
lblPingAddress.Text = Locale.Text(409);
lblPingGraphType.Text = Locale.Text(410);
chkPingShowLoss.Text = Locale.Text(413);
}
private void SaveConfig(int interval = 5000)
@ -173,6 +179,16 @@ namespace DutyContent.Tab
PingColorWorker(3, btnPingColor4);
}
private void ChkPingShowLoss_CheckedChanged(object sender, EventArgs e)
{
if (!DcConfig.PluginEnable)
return;
DcConfig.Duty.PingShowLoss = chkPingShowLoss.Checked;
SaveConfig();
}
private void ChkPingGraph_CheckedChanged(object sender, EventArgs e)
{
if (!DcConfig.PluginEnable)
@ -208,6 +224,34 @@ namespace DutyContent.Tab
SaveConfig();
}
private void CboPingGraphType_SelectedIndexChanged(object sender, EventArgs e)
{
if (!DcConfig.PluginEnable)
return;
if (cboPingGraphType.SelectedIndex>=0)
{
DcConfig.Duty.PingGraphType = cboPingGraphType.SelectedIndex;
SaveConfig();
}
}
private void LstPingAddress_MouseDoubleClick(object sender, MouseEventArgs e)
{
if (lstPingAddress.SelectedIndices.Count != 1)
return;
try
{
var s = lstPingAddress.SelectedItem as string;
Clipboard.SetText(s);
}
catch (Exception ex)
{
Logger.Ex(ex, 35);
}
}
//
private void PingOnce(bool check_plugin_enable = true)
{
@ -229,7 +273,7 @@ namespace DutyContent.Tab
{
addrs.Add(row.RemoteAddress.ToString());
var (r, l) = CalcPing(row.RemoteAddress);
var (r, l) = CalcPing(row.RemoteAddress, PingTimeout, PingAmount);
if (rtt < r)
rtt = r;
@ -256,7 +300,7 @@ namespace DutyContent.Tab
return;
}
var (r, l) = CalcPing(defip);
var (r, l) = CalcPing(defip, PingTimeout, PingAmount);
if (rtt < r)
rtt = r;
@ -268,7 +312,7 @@ namespace DutyContent.Tab
//MesgLog.L("Ping: {0}, {1}%", rtt, loss);
Color color;
if (loss > 0.0 || rtt > 150)
if (rtt > 150)
color = DcConfig.Duty.PingColors[3];
else if (rtt > 100)
color = DcConfig.Duty.PingColors[2];
@ -277,6 +321,9 @@ namespace DutyContent.Tab
else
color = DcConfig.Duty.PingColors[0];
if (!DcConfig.Duty.PingShowLoss)
loss = 0.0;
if (_last_ping != rtt || loss > 0.0 || _color != color)
{
_last_ping = rtt;
@ -293,7 +340,7 @@ namespace DutyContent.Tab
_kepts.RemoveAt(0);
_grpr.Enter();
_grpr.DrawValues(_kepts);
_grpr.DrawValues(_kepts, (Libre.PingGrapher.DrawType)DcConfig.Duty.PingGraphType);
WorkerAct.Invoker(() => _grpr.Leave());
}
@ -305,17 +352,17 @@ namespace DutyContent.Tab
}
else
{
bool havetoupdate = false;
bool have_to_update_addrs = false;
if (lstPingAddress.Items.Count == 0)
havetoupdate = true;
have_to_update_addrs = true;
else
{
var i = lstPingAddress.Items[0] as string;
havetoupdate = !addrs.Contains(i);
have_to_update_addrs = !addrs.Contains(i);
}
if (havetoupdate)
if (have_to_update_addrs)
{
WorkerAct.Invoker(() =>
{
@ -333,10 +380,9 @@ namespace DutyContent.Tab
private static readonly PingOptions _ping_options = new PingOptions { DontFragment = true };
private static readonly byte[] _ping_buffers = Encoding.ASCII.GetBytes("01234567890123456789012345678901");
private static readonly int _ping_timerout = 120;
//
private (long Rtt, double Loss) CalcPing(IPAddress host, int amount = 6)
private (long Rtt, double Loss) CalcPing(IPAddress host, int timeout, int amount)
{
var ps = new Ping();
@ -345,16 +391,32 @@ namespace DutyContent.Tab
for (var i = 0; i < amount; i++)
{
PingReply pr = ps.Send(host, _ping_timerout, _ping_buffers, _ping_options);
try
{
PingReply pr = ps.Send(host, timeout, _ping_buffers, _ping_options);
if (pr.Status != IPStatus.Success)
if (pr.Status != IPStatus.Success)
{
failed++;
if (DcConfig.DebugEnable)
{
Logger.WriteCategory(Color.Red, "Ping", "failed. status: {0} / duration: {1} / at: {2}/{3}", pr.Status, timeout, i + 1, amount);
}
}
if (rtt < pr.RoundtripTime)
rtt = pr.RoundtripTime;
}
catch
{
failed++;
}
if (rtt < pr.RoundtripTime)
rtt = pr.RoundtripTime;
System.Threading.Thread.Sleep(1);
}
double loss = (failed / amount) * 100;
double loss = failed == 0 ? 0 : (double)failed / amount * 100.0;
return (rtt, loss);
}

View file

@ -43,7 +43,8 @@ namespace DutyContent.Tab
//
this.lblTitle.AutoSize = true;
this.lblTitle.Font = new System.Drawing.Font("Microsoft Sans Serif", 20.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblTitle.Location = new System.Drawing.Point(46, 0);
this.lblTitle.Location = new System.Drawing.Point(69, 0);
this.lblTitle.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lblTitle.Name = "lblTitle";
this.lblTitle.Size = new System.Drawing.Size(62, 31);
this.lblTitle.TabIndex = 0;
@ -52,9 +53,10 @@ namespace DutyContent.Tab
// lblMesg
//
this.lblMesg.AutoSize = true;
this.lblMesg.Location = new System.Drawing.Point(3, 50);
this.lblMesg.Location = new System.Drawing.Point(4, 69);
this.lblMesg.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lblMesg.Name = "lblMesg";
this.lblMesg.Size = new System.Drawing.Size(25, 13);
this.lblMesg.Size = new System.Drawing.Size(32, 18);
this.lblMesg.TabIndex = 1;
this.lblMesg.Text = "208";
//
@ -62,7 +64,8 @@ namespace DutyContent.Tab
//
this.lblLink.AutoSize = true;
this.lblLink.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblLink.Location = new System.Drawing.Point(3, 87);
this.lblLink.Location = new System.Drawing.Point(4, 120);
this.lblLink.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lblLink.Name = "lblLink";
this.lblLink.Size = new System.Drawing.Size(32, 18);
this.lblLink.TabIndex = 2;
@ -76,12 +79,13 @@ namespace DutyContent.Tab
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.txtBody.BackColor = System.Drawing.Color.OldLace;
this.txtBody.Location = new System.Drawing.Point(16, 108);
this.txtBody.Location = new System.Drawing.Point(24, 150);
this.txtBody.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.txtBody.Multiline = true;
this.txtBody.Name = "txtBody";
this.txtBody.ReadOnly = true;
this.txtBody.ScrollBars = System.Windows.Forms.ScrollBars.Both;
this.txtBody.Size = new System.Drawing.Size(464, 296);
this.txtBody.Size = new System.Drawing.Size(584, 283);
this.txtBody.TabIndex = 3;
//
// panel1
@ -95,9 +99,10 @@ namespace DutyContent.Tab
this.panel1.Controls.Add(this.txtBody);
this.panel1.Controls.Add(this.lblMesg);
this.panel1.Controls.Add(this.lblLink);
this.panel1.Location = new System.Drawing.Point(12, 12);
this.panel1.Location = new System.Drawing.Point(4, 4);
this.panel1.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(776, 426);
this.panel1.Size = new System.Drawing.Size(796, 443);
this.panel1.TabIndex = 4;
//
// panelBase
@ -106,17 +111,20 @@ namespace DutyContent.Tab
this.panelBase.Controls.Add(this.panel1);
this.panelBase.Dock = System.Windows.Forms.DockStyle.Fill;
this.panelBase.Location = new System.Drawing.Point(0, 0);
this.panelBase.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.panelBase.Name = "panelBase";
this.panelBase.Size = new System.Drawing.Size(800, 450);
this.panelBase.Size = new System.Drawing.Size(804, 451);
this.panelBase.TabIndex = 5;
//
// UpdateNotifyForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 18F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.AutoScroll = true;
this.ClientSize = new System.Drawing.Size(800, 450);
this.ClientSize = new System.Drawing.Size(804, 451);
this.Controls.Add(this.panelBase);
this.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.Name = "UpdateNotifyForm";
this.Text = "Update";
this.panel1.ResumeLayout(false);

View file

@ -46,9 +46,9 @@ namespace DutyContent.Tab
public void UpdateUiLocale()
{
lblTitle.Text = MesgLog.Text(207, DcConfig.PluginTag, _newtag);
lblMesg.Text = MesgLog.Text(208);
lblLink.Text = MesgLog.Text(209);
lblTitle.Text = Locale.Text(207, DcConfig.PluginTag, _newtag);
lblMesg.Text = Locale.Text(208);
lblLink.Text = Locale.Text(209);
}
private void LblLink_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)

199
ThirdParty/EXComboBox.cs vendored Normal file
View file

@ -0,0 +1,199 @@
// https://www.codeproject.com/Articles/13006/Extended-ListView
using System.Windows.Forms;
using System.Drawing;
using System.Collections;
namespace DutyContent.ThirdParty
{
class EXComboBox : ComboBox
{
private Brush _highlightbrush; //color of highlighted items
public EXComboBox()
{
_highlightbrush = SystemBrushes.Highlight;
DrawMode = DrawMode.OwnerDrawFixed;
DrawItem += new DrawItemEventHandler(SelfDrawItem);
}
public Brush MyHighlightBrush
{
get { return _highlightbrush; }
set { _highlightbrush = value; }
}
private void SelfDrawItem(object sender, DrawItemEventArgs e)
{
if (e.Index == -1)
return;
e.DrawBackground();
if ((e.State & DrawItemState.Selected) != 0)
{
e.Graphics.FillRectangle(_highlightbrush, e.Bounds);
}
EXItem item = (EXItem)this.Items[e.Index];
Rectangle bounds = e.Bounds;
int x = bounds.X + 2;
if (item.GetType() == typeof(EXImageItem))
{
EXImageItem imgitem = (EXImageItem)item;
if (imgitem.MyImage != null)
{
Image img = imgitem.MyImage;
int y = bounds.Y + ((int)(bounds.Height / 2)) - ((int)(img.Height / 2)) + 1;
e.Graphics.DrawImage(img, x, y, img.Width, img.Height);
x += img.Width + 2;
}
}
else if (item.GetType() == typeof(EXMultipleImagesItem))
{
EXMultipleImagesItem imgitem = (EXMultipleImagesItem)item;
if (imgitem.MyImages != null)
{
for (int i = 0; i < imgitem.MyImages.Count; i++)
{
Image img = (Image)imgitem.MyImages[i];
int y = bounds.Y + ((int)(bounds.Height / 2)) - ((int)(img.Height / 2)) + 1;
e.Graphics.DrawImage(img, x, y, img.Width, img.Height);
x += img.Width + 2;
}
}
}
int fonty = bounds.Y + ((int)(bounds.Height / 2)) - ((int)(e.Font.Height / 2));
e.Graphics.DrawString(item.Text, e.Font, new SolidBrush(e.ForeColor), x, fonty);
e.DrawFocusRectangle();
}
public class EXItem
{
private string _text = "";
private string _value = "";
public EXItem()
{
}
public EXItem(string text)
{
_text = text;
}
public string Text
{
get { return _text; }
set { _text = value; }
}
public string MyValue
{
get { return _value; }
set { _value = value; }
}
public override string ToString()
{
return _text;
}
}
public class EXImageItem : EXItem
{
private Image _image;
public EXImageItem()
{
}
public EXImageItem(string text)
{
this.Text = text;
}
public EXImageItem(Image image)
{
_image = image;
}
public EXImageItem(string text, Image image)
{
this.Text = text;
_image = image;
}
public EXImageItem(Image image, string value)
{
_image = image;
this.MyValue = value;
}
public EXImageItem(string text, Image image, string value)
{
this.Text = text;
_image = image;
this.MyValue = value;
}
public Image MyImage
{
get { return _image; }
set { _image = value; }
}
}
public class EXMultipleImagesItem : EXItem
{
private ArrayList _images;
public EXMultipleImagesItem()
{
}
public EXMultipleImagesItem(string text)
{
this.Text = text;
}
public EXMultipleImagesItem(ArrayList images)
{
_images = images;
}
public EXMultipleImagesItem(string text, ArrayList images)
{
this.Text = text;
_images = images;
}
public EXMultipleImagesItem(ArrayList images, string value)
{
_images = images;
this.MyValue = value;
}
public EXMultipleImagesItem(string text, ArrayList images, string value)
{
this.Text = text;
_images = images;
this.MyValue = value;
}
public ArrayList MyImages
{
get { return _images; }
set { _images = value; }
}
}
}
}

1116
ThirdParty/EXListView.cs vendored Normal file

File diff suppressed because it is too large Load diff

View file

@ -33,8 +33,8 @@ namespace DutyContent
}
catch (Exception ex)
{
MesgLog.Ex(ex, 30);
MesgLog.L("URL: {0}", url);
Logger.Ex(ex, 30);
Logger.L("URL: {0}", url);
}
return null;

16
ThirdParty/WinFormSupp.cs vendored Normal file
View file

@ -0,0 +1,16 @@
using System.Reflection;
using System.Windows.Forms;
namespace DutyContent.ThirdParty
{
static class WinFormSupp
{
public static void DoubleBuffered(Control control, bool enabled)
{
var prop = control.GetType().GetProperty(
"DoubleBuffered", BindingFlags.Instance | BindingFlags.NonPublic);
prop.SetValue(control, enabled, null);
}
}
}

View file

@ -28,7 +28,7 @@ namespace DutyContent
}
catch (Exception ex)
{
MesgLog.Ex(ex, 31);
Logger.Ex(ex, 31);
}
});
}
@ -44,7 +44,7 @@ namespace DutyContent
}
catch (Exception ex)
{
MesgLog.Ex(ex, 32);
Logger.Ex(ex, 32);
return null;
}