Bring ping to left tab, Korean for global

This commit is contained in:
kshman 2021-06-03 20:54:27 +09:00
parent 8e281b8f4b
commit c32b82512f
11 changed files with 1183 additions and 842 deletions

98
Data/DcLang-Korean.txt Normal file
View file

@ -0,0 +1,98 @@
# 한국말 메시지
LANG=한국어
0=FFXIV dc
1=준비됐습니다
2=FFXIV 플러그인이 없어요!
3=FFXIV 플러그인을 찾았어요!
4=FFXIV 듀티 콘텐츠 시작합니다!
5=ACT 정보: {0} ({1})
6=FFXIV 플러그인 정보: {0} ({1})
7=잘못된 데이터: {0}
8=분석할 수 없어요
9=알수없는 듀티: {0}
10=알수없는 인스턴스: {0}
11=알수없는 지역: {0}
12=알수없는 페이트: {0}
13=데이터를 읽을 수가 없어요!
14=데이터 파일이 없어요! {0}
20=듀티 콘텐츠 정보: {1}({0}) / A:{2} / R:{3} / I:{4} / F:{5} ({6})
21=루렛
22=인스턴스
23=페이트
24=스커미시
25=크리티컬 인게이지먼트
26=기본
27=없음
99=듀티 콘텐츠 플러그인 {0}
101=소리 파일을 선택하세요
102=소리 파일 (*.wav)|*.wav|모든 파일 (*.*)|*.*
103=알림 테스트입니다!!
104=마우스 눌림 방지
200=설정
201=표시 언어
202=FFXIV를 보고 있지 않을때 오버레이를 감춥니다
300=듀티
301=콘텐츠
302=설정
303=패킷
304=데이터셋
305=로그 글꼴
306=오버레이 보기
307=투명도
308=소리 듣기
309=인스턴스
310=페이트
311=라인 알림
312=라인 토큰
313=텔레그램 알림
314=텔레그램 ID
315=텔레그램 토큰
316=패킷 찾기
317=설명
318=세이브더퀸 찾기
319=기능
320=현재값
321=상태
322=찾은값
323=CE 이름
324=상태
325=사람수
326=진행도
327=핑
328=핑 사용
329=속도별 색깔
330=매우 좋음
331=좋음
332=보통
333=나쁨
334=그래프 보기
335=클라이언트의 접속이 없을때 사용할 DC 선택
10001="{0}" 발생했어요!
10002=찾습니다: {0}
10003=매칭됐어요: {0}
10004=들어가요: {0}
10005={0} 발생했어요!
10006=대기 갯수: {0}
10007=시작
10008=취소
10009=적용 및 저장
10010=중부 라노시아로 가시면 값이 채워집니다. 또는 남부 보즈야 전선의 스커미시로도 알 수 있습니다.
10011=토벌전 "성도 이슈가르드 방어전"에 해제로 입장해보세요.
10012=매치
10013=인스턴스
10014=남부 보즈야 전선으로 가서 크리티컬 인게이지먼트를 기다리세요. 오른쪽 보즈야 찾기에 후보 데이터가 뜨면 맞는 데이터를 선택하세요.
10015=설명을 볼 항목을 선택하세요
10016=확인됨
10017=끝남
10018=등록중
10019=입장하는중
10020=진행중
10021=알수없어요
10022=패킷 데이터를 적용하고 덮어쓰실거예요?
10023=선택함

12
DcControl.Designer.cs generated
View file

@ -35,6 +35,7 @@ namespace DutyContent
this.tabPageConfig = new System.Windows.Forms.TabPage();
this.txtMesg = new System.Windows.Forms.RichTextBox();
this.btnClearMesg = new System.Windows.Forms.Button();
this.tabPagePing = new System.Windows.Forms.TabPage();
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
this.splitContainer1.Panel1.SuspendLayout();
this.splitContainer1.Panel2.SuspendLayout();
@ -65,6 +66,7 @@ namespace DutyContent
//
this.tabMain.Alignment = System.Windows.Forms.TabAlignment.Left;
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;
@ -120,6 +122,15 @@ namespace DutyContent
this.btnClearMesg.Text = "Clear Mesg";
this.btnClearMesg.UseVisualStyleBackColor = true;
//
// tabPagePing
//
this.tabPagePing.Location = new System.Drawing.Point(104, 4);
this.tabPagePing.Name = "tabPagePing";
this.tabPagePing.Size = new System.Drawing.Size(684, 489);
this.tabPagePing.TabIndex = 2;
this.tabPagePing.Text = "Ping";
this.tabPagePing.UseVisualStyleBackColor = true;
//
// DcControl
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@ -144,5 +155,6 @@ namespace DutyContent
private System.Windows.Forms.TabPage tabPageDuty;
private System.Windows.Forms.TabPage tabPageConfig;
private System.Windows.Forms.RichTextBox txtMesg;
private System.Windows.Forms.TabPage tabPagePing;
}
}

View file

@ -55,6 +55,9 @@ namespace DutyContent
Tab.DutyForm dutyform = new Tab.DutyForm();
tabPageDuty.Controls.Add(dutyform.Controls[0]);
Tab.PingForm pingform = new Tab.PingForm();
tabPagePing.Controls.Add(pingform.Controls[0]);
Tab.ConfigForm configform = new Tab.ConfigForm();
tabPageConfig.Controls.Add(configform.Controls[0]);
}
@ -130,6 +133,7 @@ namespace DutyContent
DcConfig.PluginEnable = false;
Tab.PingForm.Self?.PluginDeinitialize();
Tab.DutyForm.Self?.PluginDeinitialize();
Tab.ConfigForm.Self?.PluginDeinitialize();
DcConfig.SaveConfig();
@ -184,6 +188,7 @@ namespace DutyContent
//
Tab.ConfigForm.Self?.PluginInitialize();
Tab.DutyForm.Self?.PluginInitialize();
Tab.PingForm.Self?.PluginInitialize();
//
DcConfig.PluginEnable = true;
@ -314,6 +319,9 @@ namespace DutyContent
tabPageDuty.Text = MesgLog.Text(300);
Tab.DutyForm.Self?.UpdateUiLocale();
tabPagePing.Text = MesgLog.Text(327);
Tab.PingForm.Self?.UpdateUiLocale();
tabPageConfig.Text = MesgLog.Text(200);
Tab.ConfigForm.Self?.UpdateUiLocale();
}

View file

@ -95,6 +95,12 @@
<Compile Include="Overlay\DutyOvForm.Designer.cs">
<DependentUpon>DutyOvForm.cs</DependentUpon>
</Compile>
<Compile Include="Tab\PingForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Tab\PingForm.Designer.cs">
<DependentUpon>PingForm.cs</DependentUpon>
</Compile>
<Compile Include="ThirdParty\Converter.cs" />
<Compile Include="ThirdParty\LineDb.cs" />
<Compile Include="ThirdParty\NativeMethods.cs" />
@ -132,6 +138,9 @@
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
<EmbeddedResource Include="Tab\PingForm.resx">
<DependentUpon>PingForm.cs</DependentUpon>
</EmbeddedResource>
<None Include="Data\DcDuty-English.json" />
<None Include="Data\DcDuty-Japanese.json" />
<None Include="Data\DcDuty-Korean.json" />
@ -175,6 +184,9 @@
<ItemGroup>
<Resource Include="Data\ServerList.txt" />
</ItemGroup>
<ItemGroup>
<Resource Include="Data\DcLang-Korean.txt" />
</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

@ -6,6 +6,9 @@ namespace DutyContent.Overlay
{
public partial class DutyOvForm : Form
{
private static DutyOvForm _self;
public static DutyOvForm Self => _self;
private const int BlinkTime = 300;
private const int BlinkCount = 20;
@ -21,6 +24,8 @@ namespace DutyContent.Overlay
//
public DutyOvForm()
{
_self = this;
InitializeComponent();
Location = DcConfig.Duty.OverlayLocation;

271
Tab/DutyForm.Designer.cs generated
View file

@ -59,6 +59,7 @@ 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();
@ -99,23 +100,6 @@ namespace DutyContent.Tab
this.btnOverlayDimming = new System.Windows.Forms.Button();
this.lblOverlayTransparent = new System.Windows.Forms.Label();
this.chkEnableOverlay = new System.Windows.Forms.CheckBox();
this.tabPagePing = new System.Windows.Forms.TabPage();
this.panel6 = new System.Windows.Forms.Panel();
this.cboPingDefAddr = new System.Windows.Forms.ComboBox();
this.lblPingDefAddr = new System.Windows.Forms.Label();
this.pbxPingGraph = new System.Windows.Forms.PictureBox();
this.chkPingGraph = new System.Windows.Forms.CheckBox();
this.tlpnPingColors = new System.Windows.Forms.TableLayoutPanel();
this.lblPingStat1 = new System.Windows.Forms.Label();
this.btnPingColor4 = new System.Windows.Forms.Button();
this.btnPingColor2 = new System.Windows.Forms.Button();
this.btnPingColor3 = new System.Windows.Forms.Button();
this.lblPingStat2 = new System.Windows.Forms.Label();
this.lblPingStat4 = new System.Windows.Forms.Label();
this.btnPingColor1 = new System.Windows.Forms.Button();
this.lblPingStat3 = new System.Windows.Forms.Label();
this.lblPingColors = new System.Windows.Forms.Label();
this.chkUsePing = new System.Windows.Forms.CheckBox();
this.tabPagePacket = new System.Windows.Forms.TabPage();
this.panel5 = new System.Windows.Forms.Panel();
this.txtPacketDescription = new System.Windows.Forms.TextBox();
@ -136,7 +120,6 @@ namespace DutyContent.Tab
this.columnHeader4 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.lblPacketFinder = new System.Windows.Forms.Label();
this.ilTabContent = new System.Windows.Forms.ImageList(this.components);
this.chkShowDebug = new System.Windows.Forms.CheckBox();
this.tabContent.SuspendLayout();
this.tabPageContent.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
@ -148,10 +131,6 @@ namespace DutyContent.Tab
this.panel3.SuspendLayout();
this.panel2.SuspendLayout();
this.panel1.SuspendLayout();
this.tabPagePing.SuspendLayout();
this.panel6.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pbxPingGraph)).BeginInit();
this.tlpnPingColors.SuspendLayout();
this.tabPagePacket.SuspendLayout();
this.panel5.SuspendLayout();
this.SuspendLayout();
@ -160,7 +139,6 @@ namespace DutyContent.Tab
//
this.tabContent.Controls.Add(this.tabPageContent);
this.tabContent.Controls.Add(this.tabPageSetting);
this.tabContent.Controls.Add(this.tabPagePing);
this.tabContent.Controls.Add(this.tabPagePacket);
this.tabContent.Dock = System.Windows.Forms.DockStyle.Fill;
this.tabContent.ImageList = this.ilTabContent;
@ -204,6 +182,17 @@ namespace DutyContent.Tab
this.splitContainer1.SplitterDistance = 262;
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;
@ -670,208 +659,6 @@ namespace DutyContent.Tab
this.chkEnableOverlay.UseVisualStyleBackColor = true;
this.chkEnableOverlay.CheckedChanged += new System.EventHandler(this.ChkEnableOverlay_CheckedChanged);
//
// tabPagePing
//
this.tabPagePing.Controls.Add(this.panel6);
this.tabPagePing.ImageIndex = 3;
this.tabPagePing.Location = new System.Drawing.Point(4, 39);
this.tabPagePing.Name = "tabPagePing";
this.tabPagePing.Size = new System.Drawing.Size(792, 459);
this.tabPagePing.TabIndex = 3;
this.tabPagePing.Text = "327";
this.tabPagePing.UseVisualStyleBackColor = true;
//
// panel6
//
this.panel6.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.panel6.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.panel6.Controls.Add(this.cboPingDefAddr);
this.panel6.Controls.Add(this.lblPingDefAddr);
this.panel6.Controls.Add(this.pbxPingGraph);
this.panel6.Controls.Add(this.chkPingGraph);
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(6, 8);
this.panel6.Name = "panel6";
this.panel6.Size = new System.Drawing.Size(778, 353);
this.panel6.TabIndex = 1;
//
// cboPingDefAddr
//
this.cboPingDefAddr.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cboPingDefAddr.FormattingEnabled = true;
this.cboPingDefAddr.Location = new System.Drawing.Point(535, 51);
this.cboPingDefAddr.Name = "cboPingDefAddr";
this.cboPingDefAddr.Size = new System.Drawing.Size(238, 21);
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.Name = "lblPingDefAddr";
this.lblPingDefAddr.Size = new System.Drawing.Size(25, 13);
this.lblPingDefAddr.TabIndex = 14;
this.lblPingDefAddr.Text = "335";
//
// 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.Name = "pbxPingGraph";
this.pbxPingGraph.Size = new System.Drawing.Size(644, 114);
this.pbxPingGraph.TabIndex = 13;
this.pbxPingGraph.TabStop = false;
//
// chkPingGraph
//
this.chkPingGraph.AutoSize = true;
this.chkPingGraph.Location = new System.Drawing.Point(26, 108);
this.chkPingGraph.Name = "chkPingGraph";
this.chkPingGraph.Size = new System.Drawing.Size(44, 17);
this.chkPingGraph.TabIndex = 12;
this.chkPingGraph.Text = "334";
this.chkPingGraph.UseVisualStyleBackColor = true;
this.chkPingGraph.CheckedChanged += new System.EventHandler(this.ChkPingGraph_CheckedChanged);
//
// tlpnPingColors
//
this.tlpnPingColors.ColumnCount = 4;
this.tlpnPingColors.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
this.tlpnPingColors.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
this.tlpnPingColors.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
this.tlpnPingColors.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
this.tlpnPingColors.Controls.Add(this.lblPingStat1, 0, 0);
this.tlpnPingColors.Controls.Add(this.btnPingColor4, 3, 1);
this.tlpnPingColors.Controls.Add(this.btnPingColor2, 1, 1);
this.tlpnPingColors.Controls.Add(this.btnPingColor3, 2, 1);
this.tlpnPingColors.Controls.Add(this.lblPingStat2, 1, 0);
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.Name = "tlpnPingColors";
this.tlpnPingColors.Padding = new System.Windows.Forms.Padding(3);
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.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.Name = "lblPingStat1";
this.lblPingStat1.Size = new System.Drawing.Size(72, 22);
this.lblPingStat1.TabIndex = 6;
this.lblPingStat1.Text = "330";
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.Name = "btnPingColor4";
this.btnPingColor4.Size = new System.Drawing.Size(72, 28);
this.btnPingColor4.TabIndex = 8;
this.btnPingColor4.UseVisualStyleBackColor = false;
this.btnPingColor4.Click += new System.EventHandler(this.BtnPingColor4_Click);
//
// btnPingColor2
//
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.Name = "btnPingColor2";
this.btnPingColor2.Size = new System.Drawing.Size(72, 28);
this.btnPingColor2.TabIndex = 10;
this.btnPingColor2.UseVisualStyleBackColor = false;
this.btnPingColor2.Click += new System.EventHandler(this.BtnPingColor2_Click);
//
// btnPingColor3
//
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.Name = "btnPingColor3";
this.btnPingColor3.Size = new System.Drawing.Size(72, 28);
this.btnPingColor3.TabIndex = 9;
this.btnPingColor3.UseVisualStyleBackColor = false;
this.btnPingColor3.Click += new System.EventHandler(this.BtnPingColor3_Click);
//
// lblPingStat2
//
this.lblPingStat2.AutoSize = true;
this.lblPingStat2.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblPingStat2.Location = new System.Drawing.Point(84, 3);
this.lblPingStat2.Name = "lblPingStat2";
this.lblPingStat2.Size = new System.Drawing.Size(72, 22);
this.lblPingStat2.TabIndex = 5;
this.lblPingStat2.Text = "331";
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.Name = "lblPingStat4";
this.lblPingStat4.Size = new System.Drawing.Size(72, 22);
this.lblPingStat4.TabIndex = 3;
this.lblPingStat4.Text = "333";
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.Name = "btnPingColor1";
this.btnPingColor1.Size = new System.Drawing.Size(72, 28);
this.btnPingColor1.TabIndex = 7;
this.btnPingColor1.UseVisualStyleBackColor = false;
this.btnPingColor1.Click += new System.EventHandler(this.BtnPingColor1_Click);
//
// lblPingStat3
//
this.lblPingStat3.AutoSize = true;
this.lblPingStat3.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblPingStat3.Location = new System.Drawing.Point(162, 3);
this.lblPingStat3.Name = "lblPingStat3";
this.lblPingStat3.Size = new System.Drawing.Size(72, 22);
this.lblPingStat3.TabIndex = 4;
this.lblPingStat3.Text = "332";
this.lblPingStat3.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// lblPingColors
//
this.lblPingColors.AutoSize = true;
this.lblPingColors.Location = new System.Drawing.Point(23, 35);
this.lblPingColors.Name = "lblPingColors";
this.lblPingColors.Size = new System.Drawing.Size(25, 13);
this.lblPingColors.TabIndex = 2;
this.lblPingColors.Text = "329";
//
// 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.Name = "chkUsePing";
this.chkUsePing.Size = new System.Drawing.Size(58, 24);
this.chkUsePing.TabIndex = 0;
this.chkUsePing.Text = "328";
this.chkUsePing.UseVisualStyleBackColor = true;
this.chkUsePing.CheckedChanged += new System.EventHandler(this.ChkUsePing_CheckedChanged);
//
// tabPagePacket
//
this.tabPagePacket.Controls.Add(this.panel5);
@ -1075,17 +862,6 @@ namespace DutyContent.Tab
this.ilTabContent.Images.SetKeyName(2, "pix_tab_tool.png");
this.ilTabContent.Images.SetKeyName(3, "pix_tab_ping.png");
//
// 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;
//
// DutyForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@ -1112,12 +888,6 @@ namespace DutyContent.Tab
this.panel2.PerformLayout();
this.panel1.ResumeLayout(false);
this.panel1.PerformLayout();
this.tabPagePing.ResumeLayout(false);
this.panel6.ResumeLayout(false);
this.panel6.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.pbxPingGraph)).EndInit();
this.tlpnPingColors.ResumeLayout(false);
this.tlpnPingColors.PerformLayout();
this.tabPagePacket.ResumeLayout(false);
this.panel5.ResumeLayout(false);
this.panel5.PerformLayout();
@ -1190,23 +960,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.TabPage tabPagePing;
private System.Windows.Forms.Panel panel6;
private System.Windows.Forms.Label lblPingColors;
private System.Windows.Forms.CheckBox chkUsePing;
private System.Windows.Forms.Button btnPingColor2;
private System.Windows.Forms.Label lblPingStat4;
private System.Windows.Forms.Label lblPingStat2;
private System.Windows.Forms.Label lblPingStat3;
private System.Windows.Forms.Button btnPingColor4;
private System.Windows.Forms.Button btnPingColor1;
private System.Windows.Forms.Button btnPingColor3;
private System.Windows.Forms.Label lblPingStat1;
private System.Windows.Forms.TableLayoutPanel tlpnPingColors;
private System.Windows.Forms.PictureBox pbxPingGraph;
private System.Windows.Forms.CheckBox chkPingGraph;
private System.Windows.Forms.Label lblPingDefAddr;
private System.Windows.Forms.ComboBox cboPingDefAddr;
private System.Windows.Forms.CheckBox chkShowDebug;
}
}

View file

@ -1,5 +1,4 @@
using DutyContent.Interface;
using System;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
@ -10,8 +9,6 @@ using System.Net;
using System.Net.Http;
using System.Text;
using System.IO;
using System.Threading;
using System.Net.NetworkInformation;
namespace DutyContent.Tab
{
@ -28,12 +25,6 @@ namespace DutyContent.Tab
private Overlay.DutyOvForm _overlay;
private System.Timers.Timer _ping_timer;
private long _ping_last;
private Color _ping_color = Color.Transparent;
private Libre.PingGrapher _ping_grpr;
private List<int> _ping_keeps = new List<int>() { 0, 0, };
public DutyForm()
{
_self = this;
@ -41,7 +32,6 @@ namespace DutyContent.Tab
InitializeComponent();
_overlay = new Overlay.DutyOvForm();
_ping_grpr = new Libre.PingGrapher(pbxPingGraph);
}
private void DutyTabForm_FormClosing(object sender, FormClosingEventArgs e)
@ -112,14 +102,6 @@ namespace DutyContent.Tab
btnTestNotify.Enabled = DcConfig.Duty.EnableNotify;
//
chkUsePing.Checked = DcConfig.Duty.UsePing;
btnPingColor1.BackColor = DcConfig.Duty.PingColors[0];
btnPingColor2.BackColor = DcConfig.Duty.PingColors[1];
btnPingColor3.BackColor = DcConfig.Duty.PingColors[2];
btnPingColor4.BackColor = DcConfig.Duty.PingColors[3];
chkPingGraph.Checked = DcConfig.Duty.PingGraph;
//
switch (DcConfig.Duty.ActiveFate)
{
@ -129,52 +111,10 @@ namespace DutyContent.Tab
case 3: rdoFatePreset4.Checked = true; break;
}
UpdateFates();
//
try
{
var svl = File.ReadAllLines(Path.Combine(DcConfig.DataPath, "ServerList.txt"));
int ssv = -1;
for (var i = 0; i < svl.Length; i++)
{
cboPingDefAddr.Items.Add(svl[i]);
if (svl[i].StartsWith(DcConfig.Duty.PingDefAddr))
ssv = i;
}
if (string.IsNullOrEmpty(DcConfig.Duty.PingDefAddr))
ssv = -1;
cboPingDefAddr.SelectedIndex = ssv > 0 ? ssv : 0;
}
catch
{
cboPingDefAddr.Items.Clear();
cboPingDefAddr.Items.Add(MesgLog.Text(27));
cboPingDefAddr.SelectedIndex = 0;
}
//
_ping_timer = new System.Timers.Timer() { Interval = 5000 };
_ping_timer.Elapsed += (sender, e) => PingOnce();
if (DcConfig.Duty.UsePing)
{
PingOnce(false);
_ping_timer.Start();
}
}
public void PluginDeinitialize()
{
if (_ping_timer != null)
{
_ping_timer.Stop();
_ping_timer = null;
}
_overlay.Hide();
_overlay = null;
}
@ -209,7 +149,6 @@ namespace DutyContent.Tab
tabPageContent.Text = MesgLog.Text(301);
tabPageSetting.Text = MesgLog.Text(302);
tabPagePacket.Text = MesgLog.Text(303);
tabPagePing.Text = MesgLog.Text(327);
lblDataSet.Text = MesgLog.Text(304);
lblLogFont.Text = MesgLog.Text(305);
@ -245,15 +184,6 @@ namespace DutyContent.Tab
btnPacketStart.Text = MesgLog.Text(10007);
btnPacketApply.Text = MesgLog.Text(10009);
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);
}
public void PacketHandler(string pid, byte[] message)
@ -405,8 +335,8 @@ namespace DutyContent.Tab
var stq =
_stq_type == DcContent.SaveTheQueenType.Bozja ? 30000 :
_stq_type == DcContent.SaveTheQueenType.Zadnor ? 30100 :
30100; // temporary
_stq_type == DcContent.SaveTheQueenType.Zadnor ? 30100 :
30100; // temporary
var ce = stq + data[8];
var stat = data[10];
@ -1209,7 +1139,12 @@ namespace DutyContent.Tab
1597, 1598, 1599,
1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609,
1610, 1611, 1612, 1613, 1614, 1615, 1616, 1617, 1618, 1619,
1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628
1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628,
// zadnor
1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724,
1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732,
1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742,
};
//
@ -1303,7 +1238,7 @@ namespace DutyContent.Tab
}
// critical engagement
if (data.Length >= 12)
if (data.Length >= 12 && _stq_type != DcContent.SaveTheQueenType.No)
{
// 0[4] timestamp
// 4[2] mmss
@ -1354,7 +1289,11 @@ namespace DutyContent.Tab
if (ok)
{
var ce = DcContent.GetFate(code + 30000);
var stq =
_stq_type == DcContent.SaveTheQueenType.Bozja ? 30000 :
_stq_type == DcContent.SaveTheQueenType.Zadnor ? 30100 :
30100; // temporary
var ce = DcContent.GetFate(code + stq);
var li = new ListViewItem(new string[]
{
@ -1375,216 +1314,5 @@ namespace DutyContent.Tab
}
}
}
private void ChkUsePing_CheckedChanged(object sender, EventArgs e)
{
if (!DcConfig.PluginEnable)
return;
DcConfig.Duty.UsePing = chkUsePing.Checked;
SaveConfig();
if (chkUsePing.Checked)
{
PingOnce();
_ping_timer.Start();
}
else
{
_ping_timer.Stop();
_overlay.ResetStat();
}
}
private void PingColorWorker(int index, Button button)
{
Color color = (Color)WorkerAct.Invoker(new WorkerAct.ObjectReturnerDelegate(() =>
{
var dg = new ColorDialog()
{
AnyColor = true,
Color = DcConfig.Duty.PingColors[index],
};
return dg.ShowDialog() == DialogResult.OK ? dg.Color : DcConfig.Duty.PingColors[index];
}));
if (DcConfig.Duty.PingColors[index] != color)
{
button.BackColor = color;
DcConfig.Duty.PingColors[index] = color;
SaveConfig();
}
}
private void BtnPingColor1_Click(object sender, EventArgs e)
{
PingColorWorker(0, btnPingColor1);
}
private void BtnPingColor2_Click(object sender, EventArgs e)
{
PingColorWorker(1, btnPingColor2);
}
private void BtnPingColor3_Click(object sender, EventArgs e)
{
PingColorWorker(2, btnPingColor3);
}
private void BtnPingColor4_Click(object sender, EventArgs e)
{
PingColorWorker(3, btnPingColor4);
}
private void ChkPingGraph_CheckedChanged(object sender, EventArgs e)
{
if (!DcConfig.PluginEnable)
return;
DcConfig.Duty.PingGraph = chkPingGraph.Checked;
SaveConfig();
}
private void CboPingDefAddr_SelectedIndexChanged(object sender, EventArgs e)
{
if (!DcConfig.PluginEnable)
return;
var val = cboPingDefAddr.SelectedItem as string;
if (!string.IsNullOrEmpty(val))
{
var ss = val.Split(' ');
if (ss.Length > 0)
{
DcConfig.Duty.PingDefAddr = ss[0].Trim();
SaveConfig();
return;
}
}
DcConfig.Duty.PingDefAddr = string.Empty;
SaveConfig();
}
//
private void PingOnce(bool check_plugin_enable = true)
{
if (!DcConfig.Duty.UsePing)
return;
if (check_plugin_enable && !DcConfig.PluginEnable)
return;
var conns = DcConfig.Connections.CopyConnection();
long rtt = 0;
double loss = 0;
if (conns.Length > 0)
{
foreach (var row in conns)
{
var (r, l) = CalcPing(row.RemoteAddress);
if (rtt < r)
rtt = r;
if (loss < l)
loss = l;
}
}
else
{
if (string.IsNullOrEmpty(DcConfig.Duty.PingDefAddr))
{
_overlay.ResetStat();
return;
}
var defip = ThirdParty.Converter.ToIPAddressFromIPV4(DcConfig.Duty.PingDefAddr);
if (defip == IPAddress.None || defip == IPAddress.IPv6None)
{
_overlay.ResetStat();
return;
}
var (r, l) = CalcPing(defip);
if (rtt < r)
rtt = r;
if (loss < l)
loss = l;
}
//MesgLog.L("Ping: {0}, {1}%", rtt, loss);
Color color;
if (loss > 0.0 || rtt > 150)
color = DcConfig.Duty.PingColors[3];
else if (rtt > 100)
color = DcConfig.Duty.PingColors[2];
else if (rtt > 50)
color = DcConfig.Duty.PingColors[1];
else
color = DcConfig.Duty.PingColors[0];
if (_ping_last != rtt || loss > 0.0 || _ping_color != color)
{
_ping_last = rtt;
_ping_color = color;
_overlay.SetStatPing(color, rtt, loss);
}
//
if (DcConfig.Duty.PingGraph)
{
_ping_keeps.Add((int)rtt);
if (_ping_keeps.Count > 120)
_ping_keeps.RemoveAt(0);
_ping_grpr.Enter();
_ping_grpr.DrawValues(_ping_keeps);
WorkerAct.Invoker(() => _ping_grpr.Leave());
}
}
// http://forum.codecall.net/topic/37643-c-packet-lossping-program/
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)
{
var ps = new Ping();
int failed = 0;
long rtt = 0;
for (var i = 0; i < amount; i++)
{
PingReply pr = ps.Send(host, _ping_timerout, _ping_buffers, _ping_options);
if (pr.Status != IPStatus.Success)
failed++;
if (rtt < pr.RoundtripTime)
rtt = pr.RoundtripTime;
}
double loss = (failed / amount) * 100;
return (rtt, loss);
}
}
}

View file

@ -124,306 +124,306 @@
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAG
RgAAAk1TRnQBSQFMAgEBBAEAASgBAQEoAQEBIAEAASABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAGA
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAD+
RQAAAk1TRnQBSQFMAgEBBAEAATABAQEwAQEBIAEAASABAAT/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/AP8AWgADNgRZAcQDVQHqAxIB/wMSAf8DEgH/AxIB/wMSAf8DEgH/
AxIB/wMSAf8DEgH/AxIB/wMSAf8DEgH/AxIB/wMSAf8DEgH/AxIB/wMSAf8DEgH/AxIB/wMSAf8DEgH/
AxIB/wNdAeIDVAGuAykBPwgAAwcBCgNIAYUCEgGqAf8CDQGqAf8CDAGkAf8CDAGkAf8CDAGkAf8CDAGk
Af8CDAGkAf8CDAGkAf8CDAGjAf8CDAGiAf8CDAGiAf8CDAGiAf8CDAGiAf8CDAGiAf8CDAGiAf8CDAGi
Af8CDAGiAf8CDAGiAf8CDAGiAf8CDAGjAf8CDAGkAf8CDAGkAf8CDAGkAf8CDAGkAf8CDAGkAf8CDAGk
Af8CDQGqAf8CEgGqAf8DSAGFAwcBCv8ABQADTgGXAzMB/wOyAf8DzQH/A90B/wPdAf8D3QH/A90B/wPd
/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8AWgADNgRZAcQDVQHqAxEB/wMRAf8DEQH/AxEB/wMRAf8DEQH/
AxEB/wMRAf8DEQH/AxEB/wMRAf8DEQH/AxEB/wMRAf8DEQH/AxEB/wMRAf8DEQH/AxEB/wMRAf8DEQH/
AxEB/wNdAeIDVAGuAykBPwgAAwcBCgNIAYUCEQGqAf8CDAGqAf8CCwGkAf8CCwGkAf8CCwGkAf8CCwGk
Af8CCwGkAf8CCwGkAf8CCwGjAf8CCwGiAf8CCwGiAf8CCwGiAf8CCwGiAf8CCwGiAf8CCwGiAf8CCwGi
Af8CCwGiAf8CCwGiAf8CCwGiAf8CCwGjAf8CCwGkAf8CCwGkAf8CCwGkAf8CCwGkAf8CCwGkAf8CCwGk
Af8CDAGqAf8CEQGqAf8DSAGFAwcBCv8ABQADTgGXAzIB/wOyAf8DzQH/A90B/wPdAf8D3QH/A90B/wPd
Af8D3QH/A90B/wPdAf8D3QH/A90B/wPdAf8D3QH/A90B/wPdAf8D3QH/A90B/wPdAf8D3QH/A90B/wPd
Af8D3QH/A90B/wPIAf8DogH/AyQB/wNGAYEEAANIAYUCDAGkAf8CDAGiAf8CDAGhAf8CDAGhAf8CDAGh
Af8CDAGhAf8CDAGhAf8CCQGgAf8CCQGeAf8CCQGbAf8CCQGZAf8CCQGZAf8CCQGXAf8CCQGVAf8CCQGV
Af8CCQGVAf8CCQGVAf8CCQGXAf8CCQGZAf8CCQGZAf8CCQGbAf8CCQGeAf8CCQGgAf8CDAGhAf8CDAGh
Af8CDAGhAf8CDAGhAf8CDAGhAf8CDAGiAf8CDAGkAf8DSAGFVwABAQMCBAMEBAEGAwQBBgMDAQQDAQEC
AwABAYwAAzcBWgM/Af8D2wH/A4sB/wMpAf8DEgH/AxIB/wMSAf8DEgH/AxIB/wMSAf8DEgH/AxIB/wMS
Af8DEgH/AxIB/wMSAf8DEgH/AxIB/wMSAf8DEgH/AxIB/wMSAf8DEgH/AxIB/wMSAf8DEgH/AykB/wOH
Af8DzQH/AysB/wMrAUICDAGkAf8CDAGiAf8CCQGdAf8CBwGYAf8CBwGXAf8CBwGXAf8CBwGXAf8CBwGX
Af8CBAGRAf8CBAGPAf8CBAGMAf8CBAGKAf8CBAGKAf8CAgGIAf8CAAGGAf8CAAGGAf8CAAGGAf8CAQGG
Af8CBAGIAf8CBAGKAf8CBAGKAf8CBAGMAf8CBAGPAf8CBAGVAf8CBwGXAf8CBwGXAf8CBwGXAf8CBwGX
Af8CBwGYAf8CCQGdAf8CDAGiAf8CDAGkAf9QAAMCAQMDBgEIAw0BEgMaASQDIwEzAyEBMAMWAR4DCgEO
AwQBBgMAAQGIAANZAcMDsgH/A4oB/wFPAT0BIwH/AbkBkwE1Af8BzgGiATsB/wHOAaIBOwH/Ac4BogE7
Af8BzgGiATsB/wHOAaIBOwH/Ac4BogE7Af8BzgGiATsB/wHOAaIBOwH/Ac4BogE7Af8BzgGiATsB/wG9
AZUBMwH/AaMBgAEnAf8BvQGVATMB/wHOAaIBOwH/Ac4BogE7Af8BzgGiATsB/wHOAaIBOwH/Ac4BogE7
Af8BzgGiATsB/wHOAaIBOwH/Ac4BogE7Af8BzgGiATsB/wG5AZMBNQH/AVoBRQEmAf8DhQH/A6MB/wNU
AasCDAGjAf8CCQGaAf8CBQGRAf8CAAGNAf8CAAGNAf8CAAGKAf8CAAGGAf8CAAGBAf8CAAFZAf8CAAFX
Af8CAAFSAf8CAAFRAf8CAAFRAf8CAAFRAf8CAAFNAf8CAAFKAf8CAAFKAf8CAAFNAf8CAAFRAf8CAAFR
Af8CAAFRAf8CAAFSAf8CAAFXAf8CAAGAAf8CAAGGAf8CAAGGAf8CAAGKAf8CAAGNAf8CAAGNAf8CBQGR
Af8CCQGaAf8CDAGjAf9MAAMCAQMDBwEKAxcBIAMwAUwBRQJGAX4BTwJRAZwBTQJOAZYDQQFyAyoBQQMS
ARkDBQEHAwABAS8AAf8DAAH/AwAB/wMAAf8DAAH/RAADQQH5A8oB/wMnAf8BuQGPATQB/wHVAaIBPAH/
AdUBogE8Af8B1QGiATwB/wHVAaIBPAH/AdUBogE8Af8B1QGiATwB/wHVAaIBPAH/AdUBogE8Af8B1QGi
ATwB/wHVAaIBPAH/AcQBlQE0Af8BiQFGASAB/wEbASoBMAH/AZQBSwEfAf8B0wGhATsB/wHVAaIBPAH/
AdUBogE8Af8B1QGiATwB/wHVAaIBPAH/AdUBogE8Af8B1QGiATwB/wHVAaIBPAH/AdUBogE8Af8B1QGi
ATwB/wHAAZMBNgH/AyAB/wPFAf8DTgHwAgoBmQH/AgABiwH/AgABVwH/AgABUwH/AgABSwH/AgABSwH/
AgABRgH/AgABQwH/AgABQgH/AgABPwH/AgABOwH/AgABOwH/AgABOgH/AgABNwH/AgABMwH/AgABMwH/
AgABMwH/AgABMwH/AgABNwH/AgABOgH/AgABOwH/AgABOwH/AgABPwH/AgABQgH/AgABRQH/AgABSwH/
AgABSwH/AgABSwH/AgABUwH/AgABVwH/AgABiwH/AgoBmQH/SAADAQECAwcBCQMYASIDOAFeAVMCVQGt
AV0CYQHiA20B9wNlAfQBXgJhAdoDUAGaAy0BRgMOARMDAwEELwAB/wMAAf8DAAH/AwAB/wMAAf9EAAMS
Af8DwgH/AxQB/wHMAZUBOQH/AdUBmwE7Af8B1QGbATsB/wHVAZsBOwH/AdUBmwE7Af8B1QGbATsB/wHV
AZsBOwH/AdUBmwE7Af8B1QGbATsB/wHVAZsBOwH/Ab8BiwExAf8BkwFGAR4B/wEaASgBMQH/AQABMAGO
Af8BSQE2ASIB/wGVAUcBHgH/Ac8BlwE4Af8B1QGbATsB/wHVAZsBOwH/AdUBmwE7Af8B1QGbATsB/wHV
AZsBOwH/AdUBmwE7Af8B1QGbATsB/wHVAZsBOwH/AcUBkAE3Af8DGgH/A8IB/wMSAf8CCAGRAf8BAgEH
AYIB/wECAR4BhAH/AQgBJwGFAf8BCAEnAYAB/wEIASkBgwH/AQgBKQGDAf8BCAEpAYMB/wEIASkBWQH/
AQgBKQFZAf8BCAEpAVkB/wEIASkBWQH/AQgBKQFUAf8BCAEmAVEB/wEIASYBUQH/AQgBJgFRAf8BCAEm
AVEB/wEIASYBUQH/AQgBJgFRAf8BCAEmAVEB/wEIASYBVgH/AQgBJgFWAf8BCAEmAVYB/wEIASYBVgH/
AQgBJwGDAf8BCAEpAYMB/wEIASkBgwH/AQgBKQGDAf8BCAEpAYgB/wEEAR4BhwH/AQIBBwGDAf8CCAGR
Af9HAAEBAwYBCAMWAR4DOAFdA1UBtQNkAfEB8wH4AfwB/wHtA/8B8wP/AZIBogGsAf4DXwHgA0gBhQMf
ASwDBQEHLwAB/wMAAf8DAAH/AwAB/wMAAf9EAAMSAf8DtAH/AxIB/wHOAZABOAH/AdUBlAE6Af8B1QGU
AToB/wHVAZQBOgH/AdUBlAE6Af8B1QGUAToB/wHVAZQBOgH/AdQBkwE6Af8B0AGRATgB/wG0AVgBKwH/
AYoBPgEeAf8BEAEmATYB/wEAARQBUwH/AQABFAFOAf8BAAEbAVQB/wEzASwBJgH/AZIBQQEdAf8BuQGA
AS0B/wHSAZIBOQH/AdUBlAE6Af8B1QGUAToB/wHVAZQBOgH/AdUBlAE6Af8B1QGUAToB/wHVAZQBOgH/
AcUBiwE2Af8DGQH/A7QB/wMSAf8CAwGKAf8BBwEgAYcB/wEZAYUBqQH/ATABqwHUAf8BSQHRAd4B/wFO
AdQB4QH/AVEB1AHhAf8BUwHUAeEB/wFTAdQB4QH/AVEB1AHhAf8BTgHUAeEB/wFOAdQB4QH/AU4B0wHg
Af8BTgHRAd4B/wFOAdEB3gH/AU4B0QHeAf8BTgHRAd4B/wFOAdEB3gH/AU4B0QHeAf8BTgHRAd4B/wFO
AdEB3gH/AU4B0QHeAf8BTgHRAd4B/wFOAdEB3gH/AU4B0QHhAf8BTgHUAeEB/wFOAdQB4QH/AUkB1AHh
Af8BMQGyAdgB/wEbAYUBrwH/AQcBIAGLAf8CAwGKAf9DAAEBAwUBBwMUARsDNQFWA1QBrwFaAl0B8AHz
AfgB/AH/AdQD/wHEAfwC/wHGAf4C/wHoA/8BdgGEAYgB+wFVAlYBsQMtAUUDBwEKLwAB/wMAAf8DAAH/
AwAB/wMAAf9EAAMSAf8DpwH/AxIB/wHOAYcBNwH/AdUBiwE5Af8B1QGLATkB/wHLAYQBNQH/Ab0BVgEu
Af8BxAGAATIB/wHAAVgBMAH/AZUBPAEdAf8BjQE5AR4B/wE3ASoBJgH/AQABHgFLAf8BAAEDAUEB/wEZ
AZEBsgH/AU4B1QHmAf8BAAE3AYkB/wEAAQkBRwH/AQABIgFCAf8BTQEwASEB/wGSATsBHQH/AbEBTwEp
Af8BwwGAATEB/wHDAYABMQH/AboBVQEtAf8B0wGKATgB/wHVAYsBOQH/AcUBggE1Af8DGQH/A6cB/wMS
Af8CAgGBAf8BCwEsAZAB/wEsAaEBwgH/AR0BVgGkAf8BEQEoAVcB/wESASgBhAH/ARMBKAGIAf8BFAEo
AYgB/wEUASgBgQH/ARMBKAGBAf8BEgEoAYEB/wESASgBVwH/ARIBKAFWAf8BEgEoAVYB/wESASgBVgH/
ARIBKAFWAf8BEgEoAVYB/wESASgBVgH/ARIBKAFWAf8BEgEoAVYB/wESASgBgQH/ARIBKAGBAf8BEgEo
AYEB/wESASgBgQH/ARQBKQGIAf8BFwEsAYgB/wESASgBhAH/AREBKAFXAf8BHQFYAaQB/wEsAaEBwwH/
AQsBLAGRAf8CAgGBAf8/AAEBAwQBBgMSARgDMgFQA1IBqQFZAmQB7AGSAaIBrAH+AdkD/wHEAfwC/wHD
AfsC/wHDAfsC/wHXA/8CqAGrAf0BVwJZAb8DMgFQAwgBCy8AAf8DAAH/AwAB/wMAAf8DAAH/RAADEgH/
A5sB/wMSAf8BzgFaATUB/wHVAYMBNwH/AcsBWAEzAf8BgwExAR4B/wFDASkBIQH/AVEBLAEfAf8BSQEq
ASAB/wEaAScBMgH/AQABIQFPAf8BAAEJAUsB/wEAASYBVQH/AUgB0AHnAf8BUwHdAfEB/wE4AacBsQH/
AVkB4QH3Af8BLwGpAcUB/wEAAQoBQQH/AQABFQFSAf8BAAEkAUcB/wErAScBKQH/AU8BKwEfAf8BUAEr
AR8B/wE+ASkBJQH/AZQBNgEbAf8B0wGCATYB/wHFAVYBMwH/AxgB/wObAf8DEgH/AgIBWQH/AQwBLQGL
Af8BJQGcAb0B/wEDARQBRAH/AQABBwFQAf8BCAEuAZgB/wEHATEBnQH/AQcBLwGdAf8BBwEuAZwB/wEH
AS4BlgH/AQYBLQGVAf8BCQErAZEB/wEAAQUBUAH/AgABRwH/AgABRwH/AgABRwH/AgABRwH/AgABRwH/
AQABAwFOAf8BCAEnAZIB/wEHASkBlAH/AQEBHwGNAf8BCwE1AZgB/wEAARgBjgH/AQsBNQGfAf8BBwEl
AZMB/wEDAQgBUAH/AgABQQH/AQMBEgFCAf8BJQGXAbQB/wEMASwBiAH/AgIBWQH/OwABAQMEAQYDEAEV
AywBQwFPAlABmwFYAmIB6QGSAaIBrAH+Ad4D/wHGAf4C/wHDAfsC/wHDAfsC/wHIA/8B7AP/AXYBhQGI
AfsBVQJWAbEDLQFFAwcBCi8AAf8DAAH/AwAB/wMAAf8DAAH/DgAC/wIAAv8CAAL/AgAC/wIAAv8kAAMS
Af8DkwH/AxIB/wHMAVIBMwH/AdMBVQE1Af8BzgFSATMB/wGKAS4BGwH/AQABNgGEAf8BAAEuAY0B/wEA
ASYBiAH/AQABHAGBAf8BCgFRAZ8B/wFMAdUB5gH/AZAB7wH+Af8BLwGbAbwB/wE7AREBKAH/AZEBDQEm
Af8BKgEnAT8B/wFGAcoB5gH/AZAB7QH6Af8BNgG0AcoB/wEAATcBkgH/AQABHgGBAf8BAAEnAYcB/wEA
ATgBlgH/ARgBKAE7Af8BkwEwARoB/wHSAVUBNQH/AcMBTgExAf8DFwH/A5MB/wMSAf8CAgFZAf8BDAEu
AYsB/wElAZ0BvQH/AQMBFAFLAf8BBgEtAZUB/wFCAdYB6QH/AUMB1wHwAf8BQgHSAfAB/wFCAdEB8AH/
AUIB0QHuAf8BPwHNAesB/wE8AcUB5wH/AQABEQGKAf8CBAFRAf8CBAFRAf8CBAFRAf8CBAFRAf8BAwEF
AVIB/wEAARMBjAH/AT0BwQHiAf8BNwHEAegB/wEVAYoBzwH/AUsB4QH1Af8BAgFLAcMB/wFNAeEB9QH/
ASgBogHVAf8BAAESAZIB/wEAAQEBTQH/AQMBEgFKAf8BIwGUAbQB/wEMASkBiAH/AgIBWQH/OAADBAEF
Aw0BEgMoATwDSgGKAV4CYQHaAqgBqgH9AeID/wHGAf4C/wHDAfsC/wHDAfsC/wHJA/8B6QP/AqgBqgH9
AVwCYQHcA0cBggMdASoDBQEHLwAB/wMAAf8DAAH/AwAB/wMAAf8OAAL/AgAC/wIAAv8CAAL/AgAC/yQA
AxIB/wOPAf8DEgH/AckBTwEyAf8B0AFSATQB/wHQAVIBNAH/AaYBOgEiAf8BIAEkATIB/wEGAVABowH/
ATgBqwHSAf8BkgHrAfgB/wGJAeoB9wH/ATcBogG8Af8BNwEkAT0B/wGaARgBPgH/Ab8BKwGLAf8BwQEw
AZMB/wG7ASkBggH/AYIBEQEwAf8BLwFAAVoB/wFGAcMB2wH/AZMB8AH8Af8BhgHhAfMB/wElAZEBuQH/
AQABSwGfAf8BTQElAR0B/wG8AUcBLAH/AdABUgE0Af8BwAFLATAB/wMXAf8DjwH/AxIB/wICAVkB/wEM
AS4BiwH/ASUBnQG9Af8BAwEUAU8B/wEDAS8BnwH/AUkB4gH1Af8BUAHsAv8BVQHuAv8BVgHuAv8BVgHu
Av8BVgHuAv8BNQHAAesB/wEAAREBjwH/AgQBVgH/AgQBUwH/AgQBUQH/AgQBUgH/AQABCQGCAf8BFwFV
Ab4B/wFHAdoB+AH/ARcBmAHfAf8BNgHEAfEB/wEqAbYB6gH/ASIBrAHlAf8BQgHWAfkB/wEcAZ8B4QH/
ASUBnwHTAf8BAwEeAYwB/wECARIBTQH/ASABlAG0Af8BDAEpAYgB/wICAVkB/yQAAwEBAgMDBAQEBgQI
AQsDDwEUAyQBNgFGAkcBgAFYAlwB0QF2AYUBiQH7AekD/wHIA/8BwwH7Av8BwwH7Av8BzAP/AfAD/wF2
AYUBiQH7AVkCXQHXA0wBkgMrAUIDDQESAwMBBC8AAf8DAAH/AwAB/wMAAf8DAAH/DgAC/wIAAv8CAAL/
AgAC/wIAAv8kAAMSAf8DjwH/AxIB/wHHAU0BMgH/Ac4BUAE0Af8BzgFQATQB/wGmAToBIwH/AiABLgH/
AQABQAGQAf8BHwGHAakB/wESAScBPwH/AUYBCgEhAf8BpQEZAUEB/wHCASwBjAH/AcsBOwGkAf8B0gFD
AbEB/wHUAUQBtAH/AdEBQQGwAf8BygE6AaIB/wG+ASoBhAH/AZIBEwE3Af8BOAEPASEB/wEKAToBWAH/
ASQBigGsAf8BAAE1AYgB/wFMASUBHQH/Ab0BRgEtAf8BzgFQATQB/wG/AUoBMAH/AxcB/wOPAf8DEgH/
AgIBWQH/AQwBLQGLAf8BJQGcAbkB/wEDARQBSQH/AQMBLwGfAf8BSQHhAfUB/wFOAecC/wFPAegC/wFQ
AegC/wFSAeoC/wFWAe4C/wE1AcAB6wH/AQABEQGOAf8CBAFQAf8CBAFPAf8CBAFOAf8CBAFOAf8BAAEK
AYEB/wEtAaEB1AH/AU4B5gL/AQQBRwHBAf8BTgHmAv8BFgGPAdQB/wE7AckB8QH/ATsByQHxAf8BFgGP
AdUB/wFEAdwB9QH/AQgBLQGYAf8BAwESAUgB/wEkAZQBtAH/AQwBKQGIAf8CAgFZAf8cAAMCAQMDBgEI
Aw0BEQMXASADIgEyAyoBQAMsAUMDMQFOA0cBggFZAlwBzAFrAXQBeAH6Ae0D/wHJA/8BwwH7Av8BwwH7
Av8BzQP/AfgD/wFcAW8BcwH4AVwCXgHOAUgCSQGHAysBQgMRARcDBAEGAwABAS8AAf8DAAH/AwAB/wMA
Af8DAAH/DgAC/wIAAv8CAAL/AgAC/wIAAv8kAAMSAf8DkAH/AxIB/wHFAUsBMQH/AcwBTgEzAf8BzAFO
ATMB/wGkATcBIgH/AR0BIAEwAf8BAAE6AYkB/wEAAT8BjQH/ASkBGQEzAf8BvAEiAVcB/wHEATIBnAH/
AdEBQgGvAf8B3AFOAcEB/wHmAVcBzQH/AekBWgHSAf8B5gFYAc0B/wHdAU8BwQH/AdABQgGvAf8BxQEz
AZsB/wGzAR4BRgH/AQABJwFIAf8BCwFGAZAB/wEAAS8BgwH/AUsBJAEdAf8BuwFFASwB/wHMAU4BMwH/
Ab0BSAEvAf8DFwH/A5AB/wMSAf8CAgFZAf8BDAEtAYsB/wElAZsBuAH/AQMBEwFHAf8BBgEnAZIB/wEy
AbsB4AH/ATYBvAHmAf8BNgG/AeYB/wE9Ab8B5AH/AT0BwQHnAf8BPQHFAesB/wE4Ab8B5AH/AQABDgGE
Af8CAwFOAf8CAgFOAf8CAAFOAf8CAAFOAf8BAAECAVEB/wEAAQsBhQH/AQABEQGNAf8BAAEMAYgB/wEA
AREBjwH/AQABDQGLAf8BAAEQAZQB/wEAAREBlgH/AQEBEQGTAf8BAAERAZIB/wEAAQUBUgH/AQMBEgFH
Af8BJQGUAbQB/wEMASkBiAH/AgIBWQH/FwABAQMEAQUDCgEOAxoBJQMxAU0DRAF5AU8CUAGbAVMCVAGs
A1QBrgNVAbUBWgJeAdgDbQH3AfQD/wHKA/8BwwH7Av8BxAH8Av8B0Qf/A20B9wFYAlsBxgNDAXgDJgE4
AxABFQMEAQYDAAEBMwAB/wMAAf8DAAH/AwAB/wMAAf8OAAL/AgAC/wIAAv8CAAL/AgAC/yQAAxIB/wOS
Af8DEgH/AcMBSAEwAf8BygFLATIB/wHIAUoBMQH/AYwBKQEYAf8BBgEfATwB/wEBAT8BjAH/AQEBSwGd
Af8BRgEXATMB/wHCASwBkAH/Ac0BPQGrAf8B3gFRAcQB/wHvAYcB2gH/AfsBkwHsAf8B/QGYAfQB/wH7
AZMB7AH/Ae8BhwHaAf8B3gFRAcQB/wHOAT0BrAH/Ab0BKQGEAf8BFQEpAUkB/wETAVIBnQH/AQABLgGE
Af8BOQEgASIB/wGwAT0BJwH/AcoBSwEyAf8BuwFFAS4B/wMXAf8DkgH/AxIB/wICAVkB/wEMAS0BigH/
ASUBlwG2Af8BAwESAUcB/wEAAQMBUAH/AQABEAGPAf8BAAESAZcB/wEAARIBlwH/AQABEgGPAf8BAAES
AY8B/wEAARIBjwH/AQABDwGIAf8BAAEDAVIB/wIAAU4B/wIAAU4B/wIAAU4B/wIAAU4B/wIAAU4B/wIA
AU4B/wIDAU4B/wIEAVAB/wIEAVYB/wIEAVYB/wIEAVoB/wIEAYMB/wIEAYMB/wIEAVkB/wIAAUgB/wED
ARIBRwH/ASUBlAG0Af8BDAEpAYgB/wICAVkB/xMAAQEDBAEGAw8BFAMkATUBPwJAAW8DVgGzAVsCYQHh
A2UB9AFmAXIBdwH6AVwBbwFzAfgCWQFaAfUBVAFvAXYC+gP/Ac0D/wHDAfsC/wHEAfwC/wHUA/8B8wH4
AfwB/wJZAVwB9QFWAlgBwQNAAXADIAEuAwsBDwMEAQUDAAEBGwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/
AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/DgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/
AgAC/wIAAv8MAAMSAf8DlgH/AxIB/wHBAUUBMAH/AcgBSAExAf8BxAFGAS8B/wGHASYBGAH/AQABJQFP
Af8BEwFNAZcB/wEFAUgBlwH/AYABFgE3Af8BxgEyAZoB/wHVAUYBtwH/AeoBgAHSAf8B/AGWAfEC/wGo
Af4C/wGvA/8BqAH+Af8B/AGWAfEB/wHqAYAB0gH/AdYBRgG3Af8BxQEwAZMB/wEsASIBPgH/AREBVAGg
Af8BAAE6AY0B/wEXAR8BMwH/AYwBJwEXAf8BxwFIATEB/wG5AUIBLgH/AxgB/wOWAf8DEgH/AgIBWAH/
AQwBKwGFAf8BIgGVAbQB/wECARIBRwH/AgABSAH/AgQBWQH/AgQBgwH/AgQBgwH/AgQBVgH/AgQBVgH/
AgQBUwH/AgQBTwH/AgABTgH/AgABTgH/AgABTgH/AgABTgH/AgABTgH/AgABTgH/AgABTgH/AgIBTgH/
AgQBUAH/AgQBVgH/AgQBVgH/AgQBVgH/AgQBgwH/AgQBgwH/AgQBWQH/AgABSAH/AQMBEgFHAf8BJQGU
AbQB/wEMASkBiAH/AgIBWQH/EAADAgEDAwsBDwMjATQBRAJFAXwBVwJaAcUDbQH3AfMB+AH8Af8B8QP/
AecD/wHqA/8B7wP/AeQD/wHNA/8BwwH7Av8BxgH+Av8B2gP/AfMB+AH8Af8BZAJlAfQBVgJYAbwDPQFp
Ax0BKgMKAQ0DAwEEIwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/
DgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8MAAMSAf8DmgH/AxIB/wG+
AUQBLwH/AcUBRgEwAf8BrwE6AScB/wFGASABGwH/AQABLwGLAf8BKgGJAasB/wEDATcBWgH/AakBHgFI
Af8ByAE2AaEB/wHaAUsBvAH/AfABiAHcAf8B/gGfAfoC/wG0A/8BwgP/AbQC/wH+AZ8B+gH/AfABiAHc
Af8B2wFLAb0B/wHJATUBnQH/AVIBFwE2Af8BDQFRAZ0B/wEZAVYBogH/AQABJAFPAf8BhgElARcB/wHD
AUUBLwH/AbYBQQEtAf8DGAH/A5oB/wMSAf8CAgFXAf8BDAEpAYMB/wEkAZQBtAH/AQMBEgFHAf8CAAFI
Af8CBAFZAf8CBAGDAf8CBAGDAf8CBAFWAf8CBAFWAf8CBAFRAf8CBAFOAf8CAAFOAf8CAAFOAf8CAAFO
Af8CAAFOAf8CAAFOAf8CAAFOAf8CAAFOAf8CAAFOAf8CBAFOAf8CBAFSAf8CBAFWAf8CBAFWAf8CBAGD
Af8CBAGDAf8CBAFZAf8CAAFIAf8BAwESAUcB/wElAZQBtAH/AQwBKQGIAf8CAgFZAf8QAAMDAQQDGAEh
Az0BaQFXAlkBvwFuAXQBeAH6AfED/wHOA/8BxAH8Av8BwwH7Av8BwwH7Av8BwwH7Av8BwwH7Av8BwwH7
Av8BxgH+Av8B3gP/AZIBogGsAf4BTgJdAfABVQJXAbcDOwFjAxoBJQMJAQwDAwEEJwAB/wMAAf8DAAH/
AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/DgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/
AgAC/wIAAv8CAAL/AgAC/wIAAv8MAAMSAf8DnwH/AxIB/wG7AUEBLgH/AcABQgEuAf8BhgEkARYB/wEJ
AR4BNwH/AQABPQGUAf8BMQGVAbkB/wEhASgBQwH/AbgBIQFVAf8BxwE2AaAB/wHZAUoBuwH/Ae8BhQHa
Af8B/gGdAfoC/wGxA/8BvAP/AbEC/wH+AZ0B+gH/Ae8BhQHaAf8B2QFKAbwB/wHHATUBnwH/AaQBGwFE
Af8BDAFBAYkB/wE3AZcBuAH/AQABLQGKAf8BRQEfARwB/wGtATgBJgH/AbMBPgEsAf8DGAH/A58B/wMS
Af8CAgFXAf8BDAEpAYMB/wElAZQBtAH/AQMBEgFHAf8BAAEPAVkB/wELATkBrAH/AQwBPgG2Af8BCgE8
AbAB/wEEASsBogH/AQABFQGOAf8BAQEIAVkB/wIEAVAB/wIAAU4B/wIAAU4B/wIAAU4B/wIAAU4B/wIA
AU4B/wIAAU4B/wIAAU4B/wIAAU4B/wIEAU4B/wIEAVEB/wIEAVYB/wIEAVYB/wIEAYMB/wIEAYMB/wIE
AVkB/wIAAUgB/wEDARIBRwH/ASQBlAG0Af8BDAEpAYgB/wICAVkB/xAAAwQBBgMjATMBTQJOAZUDZQH0
BP8B2gP/AdkD/wHgA/8B3QP/Ac8D/wHFAf0C/wHDAfsC/wHDAfsC/wHTA/8BkgGiAawB/gFOAl0B8AFV
AlcBtwM6AWADGAEiAwgBCwMCAQMrAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/
AwAB/wMAAf8OAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wwAAxIB/wOk
Af8DEgH/AbkBPgEsAf8BoAEwASAB/wFAARwBGgH/AQABHgFWAf8BIAFVAaIB/wEIAUYBkgH/AU4BDgEf
Af8BtwEhAVgB/wHCATIBmwH/AdMBRAGzAf8B5gFZAc8B/wH6AZEB6wL/AaAB/AL/AagB/gL/AaAB/AH/
AfoBkQHrAf8B5gFZAc8B/wHTAUQBtAH/AcMBMQGaAf8BtgEfAUwB/wEiARoBLgH/ARwBVwGkAf8BAAE7
AZEB/wEEARYBMgH/AYQBIgEUAf8BqQE3AScB/wMYAf8DpAH/AxIB/wICAVgB/wEMASkBhQH/ASUBlAG0
Af8BAwESAUcB/wEKAS8BkgH/AUkB5AH1Af8BTgHpAv8BRwHgAfgB/wEqAbEB3wH/ARIBRwG1Af8BBAEW
AYoB/wEEAQYBUAH/AgABTgH/AgABTgH/AgABTgH/AgABTgH/AgABTgH/AgABTgH/AgABTgH/AgIBTgH/
AgQBTwH/AgQBUwH/AgQBWAH/AQEBCQGEAf8BAAEOAY0B/wEAAQwBjAH/AQMBBwGDAf8CAAFJAf8BAgES
AUcB/wEiAZUBtAH/AQwBKwGIAf8CAgFZAf8QAAMEAQYDIgEyAUwCTQGRA2QB8QKoAakB/QGGAZsBqQH+
AqgBqgH9AWQBggGIAfsBZQF3AX0B/AHnAfEB+AH/AdUD/wHDAfsC/wHDAfsC/wHgA/8BXwF5AYYB+wFa
Al0B0wNCAXQDGgElAwYBCAMBAQIvAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/
AwAB/wMAAf8OAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wwAAxIB/wOq
Af8DEgH/AakBNAElAf8BSAEdARoB/wE5AZYBtQH/AVIBwQHkAf8BlAHYAesB/wEAASwBiAH/AQABHwFA
Af8BoQEXAT8B/wG/ASoBjgH/AcoBOgGmAf8B2gFLAbwB/wHoAYEB0gH/AfQBigHhAf8B+QGQAegB/wH0
AYoB4QH/AegBgQHSAf8B2gFLAb0B/wHLAToBpQH/AcABKQGKAf8BWAEWATMB/wEAAR0BTQH/ARkBVwGp
Af8BnAHhAe8B/wFEAbAB1gH/ASwBJQEtAf8BkAEpARwB/wMZAf8DqgH/AxIB/wICAVkB/wEMASkBiAH/
ASUBlAG0Af8BAwESAUcB/wEAARkBigH/ARMBjAHPAf8BEwGTAdwB/wEUAY8B1QH/AQoBUQHDAf8BBAEr
AaUB/wEAAQ8BiQH/AQABBQFVAf8CAwFOAf8CAAFOAf8CAAFOAf8CAAFOAf8CAAFOAf8CAAFOAf8CAAFO
Af8CAwFOAf8CBAFQAf8CBAFYAf8BBAETAY4B/wERAUkBuAH/AScBmgHSAf8BHgGNAcsB/wEIATABpQH/
AQABBQFRAf8BAwESAUcB/wElAZcBtgH/AQwBLQGKAf8CAgFZAf8QAAMDAQQDFgEeAzYBWQFPAlEBnAFX
AlkBvwFZAlwByQFaAl0BygFcAl4BzgFYAl8B4wFXAmIB9gHwA/8BwwH7Av8BwwH7Av8B3QP/AW8BewF/
AfwDWQHHAzcBWwMPARQDAAEBTwAB/wMAAf8DAAH/AwAB/wMAAf8OAAL/AgAC/wIAAv8CAAL/AgAC/yQA
AxIB/wOwAf8DEgH/Aa8BNQEoAf8BVwEcARQB/wE6ARcBGQH/ATUBUQGFAf8BsAHuAfcB/wGbAeMB7wH/
AQABLwGRAf8BBAErAUQB/wGlARsBRwH/AcABLgGVAf8BywE8AakB/wHWAUcBtwH/Ad4BUQHCAf8B4QFT
AcYB/wHeAVEBwgH/AdYBRwG3Af8BywE8AagB/wHDAS0BkQH/AYEBFwE5Af8BAAE1AYAB/wEMAU8BpQH/
AbcB8wH6Af8BlgHaAeQB/wEtASIBKgH/AU0BGwEWAf8BowEwASUB/wMZAf8DsAH/AxIB/wICAVkB/wEM
ASkBiAH/ASUBlAG0Af8BAwESAUcB/wEAAScBjwH/ATMBxwHoAf8BOgHQAfMB/wE7AcsB8gH/ATEBuwHm
Af8BGwGNAcwB/wEHATIBpQH/AQIBDgGBAf8BAAEDAU4B/wIAAU4B/wIAAU4B/wIAAU4B/wIAAU4B/wIA
AU4B/wIAAU4B/wIAAU4B/wIEAU4B/wEBAQcBWAH/AQ0BRwG1Af8BPAHQAfEB/wFMAekB/QH/AUkB5QH7
Af8BJQGpAdwB/wEAARYBhAH/AQMBEwFHAf8BJQGbAbgB/wEMAS0BiwH/AgIBWQH/EAADAgEDAwoBDQMc
AScDLwFJAzwBZgNEAXoDSAGEAU4CTwGXAVkCXAHMAVMCZAHxBP8BwwH7Av8BwwH7Av8B1wP/AqgBqwH9
A1sByAM3AVoDCwEPUwAB/wMAAf8DAAH/AwAB/wMAAf8OAAL/AgAC/wIAAv8CAAL/AgAC/yQAAxIB/wO2
Af8DEgH/AbABNAEoAf8BsgE0AScB/wGfASsBHwH/AVgBGwESAf8BHwEXASYB/wGTAdQB6AH/AZYB3gHv
Af8BAAE+AZYB/wEXASIBOQH/AbgBHwFSAf8BvwEsAZMB/wHGATUBoAH/AcsBOwGmAf8BzQE9AaoB/wHL
ATsBpgH/AcYBNQGgAf8BwAEsAZEB/wGdARoBQwH/AQABNwFRAf8BDAFOAagB/wGvAesB+AH/AUsBoAHD
Af8BPQIWAf8BWgEbAREB/wGtATIBJQH/AakBMgEnAf8DGQH/A7YB/wMSAf8CAgFZAf8BDAEpAYgB/wEk
AZQBtAH/AQMBEgFHAf8BAAEiAY4B/wEsAcMB5wH/ATMBzgHyAf8BMwHIAfIB/wEpAbQB5gH/ARYBigHK
Af8BBgEwAZ8B/wEAAQoBVAH/AgABRQH/AgABQwH/AgABQwH/AgABQwH/AgABQwH/AgABQwH/AgABQwH/
AgABQwH/AgABRAH/AQABBAFSAf8BHQGVAcsB/wFBAekB/QH/AUMB7gL/AUMB7gL/ATUB1QHwAf8BAAEj
AZAB/wEDARQBRwH/ASUBnAG5Af8BDAEtAYsB/wICAVkB/xMAAQEDBwEJAxYBHwMvAUkBQQJCAXMBTAJN
AZEBUAJSAaMBVQJXAboDXwHgAUkCYgH2AfMD/wHDAfsC/wHDAfsC/wHdA/8BbwF7AX8B/AFXAloBvQMx
AU8DCQEMUwAB/wMAAf8DAAH/AwAB/wMAAf8OAAL/AgAC/wIAAv8CAAL/AgAC/yQAAxIB/wO7Af8DEgH/
Aa0BMQEnAf8BswEzASgB/wGzATMBKAH/AagBLgEjAf8BVwEYAREB/wEfARcBJgH/AZEB0QHqAf8BVgG6
Ad0B/wEAAUcBkwH/AUABFAEvAf8BuAEdAVUB/wG8ASUBhwH/AcABJwGKAf8BvwEoAYwB/wHAAScBigH/
AbwBJAGGAf8BtAEcAU0B/wETASUBOgH/AQEBTQGiAf8BnQHeAfEB/wFLAaABxgH/AT8BFQEWAf8BlgEl
ARwB/wGyATMBKAH/AbMBMwEoAf8BpgEvASYB/wMaAf8DuwH/AxIB/wICAVkB/wEMASkBiAH/ASABlAG0
Af8BAgESAUcB/wEAARQBhQH/AQoBggHKAf8BCQGOAdcB/wEJAYoB1wH/AQkBhgHPAf8BCQFRAcAB/wED
ATgBqgH/AQABGQGMAf8CAAFAAf8CAAE6Af8CAAE6Af8CAAE6Af8CAAE6Af8CAAE6Af8CAAE6Af8CAAE8
Af8CAAE+Af8BAAEBAU4B/wETAYABwQH/ATYB4wH7Af8BOgHuAv8BOgHuAv8BJwHGAeoB/wEAARsBjAH/
AQMBFAFJAf8BJQGdAb0B/wEMAS4BiwH/AgIBWQH/EwABAQMKAQ0DKgFAAU4CTwGXAVgCXAHRA1wB6gNn
AfICWQFcAfUBZAGCAYgB+wHaAeoB9QH/AdgD/wHDAfsC/wHFAf0C/wHvA/8DYgH2AVACUgGjAycBOgMH
AQlTAAH/AwAB/wMAAf8DAAH/AwAB/w4AAv8CAAL/AgAC/wIAAv8CAAL/JAADEgH/A8AB/wMSAf8BqQEv
ASUB/wGvATABJgH/Aa8BMAEmAf8BrwEwASYB/wGlASsBIgH/AVMBFgEPAf8BIAEpAT4B/wGYAdoB8QH/
ASwBjwG8Af8BAAEyAU4B/wFPAQoBIAH/AUMBFgExAf8BMgEcATcB/wEyARwBNwH/ATYBGwE2Af8BSwES
AS0B/wE5AQ0BHgH/AQABQgGQAf8BWgG8AeAB/wGEAbsB4QH/ATEBEwEZAf8BkQEiARkB/wGvATABJgH/
Aa8BMAEmAf8BrwEwASYB/wGiAS0BJAH/AxoB/wPAAf8DEgH/AgIBWgH/AQwBKQGLAf8BIwGUAbQB/wEA
AQ4BQwH/AQABIgGMAf8BKwHaAesB/wEwAeQB9QH/ATAB4gH1Af8BKwHZAfMB/wElAcIB6QH/ARYBkwHR
Af8BBgEyAaMB/wIAATcB/wIAATAB/wIAATAB/wIAATAB/wIAATAB/wIAATAB/wIAATAB/wIAATMB/wIA
ATMB/wIAATsB/wEAASEBkAH/ARcBngHWAf8BKwHRAfAB/wElAcMB6gH/AQwBUgG9Af8BAAEFAVAB/wEA
ARABSQH/ASUBnQG9Af8BDAEuAY4B/wICAVoB/xMAAQEDDwEUAzsBYwNeAdgE/wH7A/8B8wP/Ae4D/wHi
A/8B0QP/AcYB/gL/AcQB/AL/AdYD/wHnAfEB+AH/AVcCXAHfA0QBeQMYASIDBAEGUwAB/wMAAf8DAAH/
AwAB/wMAAf8OAAL/AgAC/wIAAv8CAAL/AgAC/yQAAxIB/wPHAf8DEgH/AaYBKwEkAf8BrAEsASUB/wGs
ASwBJQH/AawBLAElAf8BrAEsASUB/wGaASQBHQH/AUoBFAESAf8BPQGQAbIB/wGWAdIB8QH/AQIBRQGi
Af8BAAE+AYsB/wEAAUYBkwH/AQABTAGaAf8BAgFOAZwB/wEAAUsBlwH/AQABRgGTAf8BAAE5AYsB/wEn
AYkBuwH/AZgB2AHzAf8BIQEvAUUB/wFSARQBDwH/AasBKwEkAf8BrAEsASUB/wGsASwBJQH/AawBLAEl
Af8BnwEqASMB/wMaAf8DxwH/AxIB/wIEAYUB/wEQATABjQH/ASUBlwG0Af8BAAEMAUEB/wEAAQMBQgH/
AQABJgGMAf8BAAEoAZIB/wEAASgBkgH/AQABJgGQAf8BAAEhAYYB/wEAARQBVAH/AQABBQFEAf8CAAEt
Af8CAAEnAf8CAAEnAf8CAAEnAf8CAAEnAf8CAAEnAf8CAAEnAf8CAAEnAf8CAAEtAf8CAAEuAf8CAAE5
Af8BAAEMAVQB/wEAASIBigH/AQABGgGFAf8BAAEFAU0B/wIAAToB/wEAAQ0BQgH/ASUBnAG5Af8BEAEx
AZEB/wIEAYUB/xMAAQEDDQESAzgBXAFYAlsBywGSAZ8BqAH+AeoD/wHNA/8BxAH8Av8BwwH7Av8BwwH7
Av8BxgH+Av8B2AP/AfMB+AH8Af8DXQHwA1IBqQMuAUcDDAEQAwIBA1MAAf8DAAH/AwAB/wMAAf8DAAH/
RAADEgH/A88B/wMSAf8BowEoASIB/wGoASkBIwH/AagBKQEjAf8BqAEpASMB/wGoASkBIwH/AagBKQEj
Af8BjQEcARcB/wElARcBIgH/AYwB0gHzAf8BwwHwAfgB/wHVAe4B9wH/AeAB9wH8Af8B5wP/AegD/wHm
Af4C/wHdAfIB+gH/Ac0B7QH3Af8BtQHvAfsB/wFLAasBzwH/AUABEAESAf8BlgEhARsB/wGoASkBIwH/
AagBKQEjAf8BqAEpASMB/wGoASkBIwH/AZ0BJwEhAf8DGwH/A88B/wMSAf8CCgGKAf8BEQEzAZgB/wEm
AZUBtgH/ARABNwGIAf8BAgEQAUAB/wECARABRQH/AQIBEAFFAf8BAgEQAUUB/wECARABPwH/AQIBEAE/
Af8BAgEQAT8B/wECARABOgH/AQABCgE5Af8BAAEKATkB/wEAAQoBOQH/AQABCgE5Af8BAAEKATkB/wEA
AQoBOQH/AQABCgE5Af8BAAEKATkB/wECARABOgH/AQIBEQFAAf8BAgESAUEB/wECARIBQQH/AQIBEgFH
Af8BAgESAUcB/wECAREBRgH/AQIBEAFAAf8BDgE3AYcB/wElAZQBtQH/AREBMwGYAf8CCgGKAf8TAAEB
AwcBCgMmATgDSgGLAVkCXAHPAWEBbwFzAfgB8wH4AfwB/wHyA/8B5gP/AegD/wH6A/8BkgGiAawB/gNh
Ae4DVQGyAzgBXAMVAR0DBQEHAwABAVMAAf8DAAH/AwAB/wMAAf8DAAH/RAADEgH/A9cB/wMSAf8BnwEl
ASEB/wGkASYBIgH/AaQBJgEiAf8BpAEmASIB/wGkASYBIgH/AaQBJgEiAf8BmQEhAR0B/wE6AQ4BEgH/
Aa8B3AHkAf8B4gHwAfIB/wGNAaQBrwH/AT4BRAFQAf8BLAEoATYB/wEtASkBNwH/AS8BLAE5Af8BSQFV
AYYB/wGlAcABxQH/Ae8C+wH/ATUBggGXAf8BSwEPAQ4B/wGjASUBIQH/AaQBJgEiAf8BpAEmASIB/wGk
ASYBIgH/AaQBJgEiAf8BmQEkASAB/wMbAf8D1wH/AxIB/wILAZQB/wEQAS4BmwH/ATEBogHDAf8BRAG3
Ac0B/wFAAbkBzQH/AUABuQHNAf8BPgG5Ac0B/wE9AbkBzQH/AT0BuQHNAf8BPQG5Ac0B/wE9AbkBzQH/
AT0BuQHNAf8BPQG5Ac0B/wE9AbkBzQH/AT0BuQHNAf8BPQG5Ac0B/wE9AbkBzQH/AT0BuQHNAf8BPQG5
Ac0B/wE9AbkBzQH/AUABuQHNAf8BQAG8Ac8B/wFAAb8B0gH/AUABvwHSAf8BQAG/AdIB/wFAAb8B0gH/
AT4BvAHPAf8BPQG5Ac0B/wE8AbYByAH/ASwBngHAAf8BEAEtAZsB/wILAZQB/xQAAwQBBQMRARcDKQE/
A0QBeQFVAlYBtAFcAmEB3ANfAfMBZgFyAXcB+gFmAXIBdwH6A10B7QFbAl4B0AFQAlEBnwM2AVkDGAEh
AwcBCgMBAQJXAAH/AwAB/wMAAf8DAAH/AwAB/0QAAxIB/wPfAf8DEgH/AZwBIgEgAf8BoQEjASEB/wGh
ASMBIQH/AaEBIwEhAf8BoQEjASEB/wGhASMBIQH/AZsBIAEeAf8BQAENARAB/wGPAZYBoQH/AS4BCwET
Af8BSAINAf8BSwENAQwB/wGBARUBEwH/AYEBFQETAf8BgQEVARMB/wFKAQ0BDAH/AUUBDQEOAf8BIgEW
ASUB/wFSAVYBiAH/AUoBDQEMAf8BoAEiASAB/wGhASMBIQH/AaEBIwEhAf8BoQEjASEB/wGhASMBIQH/
AZYBIQEfAf8DHAH/A98B/wMSAf8CDAGeAf8BDQEUAZQB/wEcATYBnwH/AS8BVgGuAf8BMgFaAasB/wEy
AVoBqwH/ATABWgGrAf8BLwFaAacB/wEvAVoBpgH/AS0BVwGmAf8BKQFUAaYB/wEpAVQBogH/ASkBVAGh
Af8BKQFUAaEB/wEpAVQBoQH/ASkBVAGhAf8BKQFUAaEB/wEpAVQBoQH/ASkBVAGhAf8BKQFUAaEB/wEt
AVQBogH/AS0BVAGmAf8BMAFXAaYB/wEyAVoBpgH/ATIBWgGnAf8BMgFaAasB/wEwAVoBqwH/AS8BWgGr
Af8BLAFWAa4B/wEaATYBnwH/AQ0BFAGUAf8CDAGeAf8XAAEBAwQBBgMMARADHAEoAzEBTQNCAXUDTgGZ
AVMCVQGtA1IBqQNLAY4BPAI9AWcDKQE+AxQBGwMHAQkDAgEDWwAB/wMAAf8DAAH/AwAB/wMAAf9EAANM
AfMD3wH/AykB/wGKAhwB/wGbAR4BHwH/AZsBHgEfAf8BmwEeAR8B/wGbAR4BHwH/AZsBHgEfAf8BmgEd
AR4B/wFFAQoBCwH/AT8BCgENAf8BRwIKAf8BmQEdAR4B/wGaAR4BHwH/AZsBHgEfAf8BmwEeAR8B/wGb
AR4BHwH/AZoBHQEeAf8BkgEaARsB/wFGAgoB/wE8AQoBDgH/AUcCCgH/AZoBHgEfAf8BmwEeAR8B/wGb
AR4BHwH/AZsBHgEfAf8BmwEeAR8B/wFXARoBGwH/AzEB/wPdAf8DTgHwAhEBpAH/AgwBngH/AgsBlAH/
AgoBjwH/AgoBjAH/AgoBhgH/AgoBggH/AgUBWQH/AgQBWQH/AgMBVgH/AgIBUwH/AgIBUQH/AgIBUQH/
AgIBUQH/AgIBUQH/AgIBUQH/AgIBUQH/AgIBUQH/AgIBUQH/AgIBUQH/AgIBUQH/AgIBUwH/AgMBVgH/
AgQBWQH/AgUBWQH/AgoBggH/AgoBhgH/AgoBjAH/AgoBjwH/AgsBlAH/AgwBngH/AhEBpAH/GwABAQMC
AQMDBgEIAwwBEAMWAR4DIgEyAyoBQAMpAT4DHwEsAxIBGQMKAQ0DBAEGAwEBAl8AAf8DAAH/AwAB/wMA
Af8DAAH/RAADVwG9A78B/wOUAf8BPQEbAR0B/wGKARoBIAH/AZMBGAEfAf8BkwEYAR8B/wGTARgBHwH/
AZMBGAEfAf8BkwEYAR8B/wGSARgBHgH/AY4BFgEdAf8BkgEYAR8B/wGTARgBHwH/AZMBGAEfAf8BkwEY
AR8B/wGTARgBHwH/AZMBGAEfAf8BkwEYAR8B/wGTARgBHwH/AZIBGAEeAf8BjQEWARwB/wGSARgBHwH/
AZMBGAEfAf8BkwEYAR8B/wGTARgBHwH/AZMBGAEfAf8BgAEbASAB/wEyARoBHAH/A7QB/wO0Af8DVAGu
AhQBrAH/AhQBqQH/AhQBpgH/Ag8BpgH/Ag4BpgH/Ag4BowH/Ag4BnwH/AgwBngH/AgwBlwH/AgwBlwH/
AgwBlgH/AgwBlgH/AgwBjgH/AgwBjgH/AgwBjgH/AgwBjgH/AgwBjgH/AgwBjgH/AgwBjgH/AgwBjgH/
AgwBlgH/AgwBlgH/AgwBlwH/AgwBlwH/AgwBngH/Ag4BnwH/Ag4BowH/Ag4BpgH/Ag8BpgH/AhQBpgH/
AhQBqQH/AhQBrAH/JAADAQECAwMEBAQGAQgDBgEIAwQBBgMDAQQDAAEBZwAB/wMAAf8DAAH/AwAB/wMA
Af9EAAM0AVQDQQH/A+4B/wOTAf8DKAH/AxIB/wMSAf8DEgH/AxIB/wMSAf8DEgH/AxIB/wMSAf8DEgH/
AxIB/wMSAf8DEgH/AxIB/wMSAf8DEgH/AxIB/wMSAf8DEgH/AxIB/wMSAf8DEgH/AxIB/wMxAf8DsgH/
A+oB/wMxAf8DLQFFAhQBrAH/AhQBrAH/AhQBrAH/AhQBrAH/AhQBrAH/AhQBrAH/AhQBrAH/AhABqAH/
Ag8BpAH/AgwBogH/AgwBnwH/AgwBnwH/AgwBnAH/AgwBnAH/AgwBnAH/AgwBnAH/AgwBnAH/AgwBnAH/
AgwBnAH/AgwBnAH/AgwBnwH/AgwBnwH/AgwBogH/Ag8BpwH/AhABqAH/AhQBrAH/AhQBrAH/AhQBrAH/
AhQBrAH/AhQBrAH/AhQBrAH/AhQBrAH//wAFAANKAY0DQAH/A80B/wP5Af8D+wH/A/sB/wP7Af8D+wH/
Af8D3QH/A90B/wPIAf8DogH/AyMB/wNGAYEEAANIAYUCCwGkAf8CCwGiAf8CCwGhAf8CCwGhAf8CCwGh
Af8CCwGhAf8CCwGhAf8CCAGgAf8CCAGeAf8CCAGbAf8CCAGZAf8CCAGZAf8CCAGXAf8CCAGVAf8CCAGV
Af8CCAGVAf8CCAGVAf8CCAGXAf8CCAGZAf8CCAGZAf8CCAGbAf8CCAGeAf8CCAGgAf8CCwGhAf8CCwGh
Af8CCwGhAf8CCwGhAf8CCwGhAf8CCwGiAf8CCwGkAf8DSAGFVwABAQMCBAMEBAEGAwQBBgMDAQQDAQEC
AwABAYwAAzcBWgM+Af8D2wH/A4sB/wMoAf8DEQH/AxEB/wMRAf8DEQH/AxEB/wMRAf8DEQH/AxEB/wMR
Af8DEQH/AxEB/wMRAf8DEQH/AxEB/wMRAf8DEQH/AxEB/wMRAf8DEQH/AxEB/wMRAf8DEQH/AygB/wOH
Af8DzQH/AyoB/wMrAUICCwGkAf8CCwGiAf8CCAGdAf8CBgGYAf8CBgGXAf8CBgGXAf8CBgGXAf8CBgGX
Af8CAwGRAf8CAwGPAf8CAwGMAf8CAwGKAf8CAwGKAf8CAQGIAf8CAAGGAf8CAAGGAf8CAAGGAf8CAAGG
Af8CAwGIAf8CAwGKAf8CAwGKAf8CAwGMAf8CAwGPAf8CAwGVAf8CBgGXAf8CBgGXAf8CBgGXAf8CBgGX
Af8CBgGYAf8CCAGdAf8CCwGiAf8CCwGkAf9QAAMCAQMDBgEIAw0BEgMaASQDIwEzAyEBMAMWAR4DCgEO
AwQBBgMAAQGIAANZAcMDsgH/A4oB/wFOATwBIgH/AbkBkwE0Af8BzgGiAToB/wHOAaIBOgH/Ac4BogE6
Af8BzgGiAToB/wHOAaIBOgH/Ac4BogE6Af8BzgGiAToB/wHOAaIBOgH/Ac4BogE6Af8BzgGiAToB/wG9
AZUBMgH/AaMBgAEmAf8BvQGVATIB/wHOAaIBOgH/Ac4BogE6Af8BzgGiAToB/wHOAaIBOgH/Ac4BogE6
Af8BzgGiAToB/wHOAaIBOgH/Ac4BogE6Af8BzgGiAToB/wG5AZMBNAH/AVkBRAElAf8DhQH/A6MB/wNU
AasCCwGjAf8CCAGaAf8CBAGRAf8CAAGNAf8CAAGNAf8CAAGKAf8CAAGGAf8CAAGBAf8CAAFYAf8CAAFW
Af8CAAFRAf8CAAFQAf8CAAFQAf8CAAFQAf8CAAFMAf8CAAFJAf8CAAFJAf8CAAFMAf8CAAFQAf8CAAFQ
Af8CAAFQAf8CAAFRAf8CAAFWAf8CAAGAAf8CAAGGAf8CAAGGAf8CAAGKAf8CAAGNAf8CAAGNAf8CBAGR
Af8CCAGaAf8CCwGjAf9MAAMCAQMDBwEKAxcBIAMwAUwBRQJGAX4BTwJRAZwBTQJOAZYDQQFyAyoBQQMS
ARkDBQEHAwABAS8AAf8DAAH/AwAB/wMAAf8DAAH/RAADQQH5A8oB/wMmAf8BuQGPATMB/wHVAaIBOwH/
AdUBogE7Af8B1QGiATsB/wHVAaIBOwH/AdUBogE7Af8B1QGiATsB/wHVAaIBOwH/AdUBogE7Af8B1QGi
ATsB/wHVAaIBOwH/AcQBlQEzAf8BiQFFAR8B/wEaASkBLwH/AZQBSgEeAf8B0wGhAToB/wHVAaIBOwH/
AdUBogE7Af8B1QGiATsB/wHVAaIBOwH/AdUBogE7Af8B1QGiATsB/wHVAaIBOwH/AdUBogE7Af8B1QGi
ATsB/wHAAZMBNQH/Ax8B/wPFAf8DTgHwAgkBmQH/AgABiwH/AgABVgH/AgABUgH/AgABSgH/AgABSgH/
AgABRQH/AgABQgH/AgABQQH/AgABPgH/AgABOgH/AgABOgH/AgABOQH/AgABNgH/AgABMgH/AgABMgH/
AgABMgH/AgABMgH/AgABNgH/AgABOQH/AgABOgH/AgABOgH/AgABPgH/AgABQQH/AgABRAH/AgABSgH/
AgABSgH/AgABSgH/AgABUgH/AgABVgH/AgABiwH/AgkBmQH/SAADAQECAwcBCQMYASIDOAFeAVMCVQGt
AV0CYQHiA20B9wNlAfQBXgJhAdoDUAGaAy0BRgMOARMDAwEELwAB/wMAAf8DAAH/AwAB/wMAAf9EAAMR
Af8DwgH/AxMB/wHMAZUBOAH/AdUBmwE6Af8B1QGbAToB/wHVAZsBOgH/AdUBmwE6Af8B1QGbAToB/wHV
AZsBOgH/AdUBmwE6Af8B1QGbAToB/wHVAZsBOgH/Ab8BiwEwAf8BkwFFAR0B/wEZAScBMAH/AQABLwGO
Af8BSAE1ASEB/wGVAUYBHQH/Ac8BlwE3Af8B1QGbAToB/wHVAZsBOgH/AdUBmwE6Af8B1QGbAToB/wHV
AZsBOgH/AdUBmwE6Af8B1QGbAToB/wHVAZsBOgH/AcUBkAE2Af8DGQH/A8IB/wMRAf8CBwGRAf8BAQEG
AYIB/wEBAR0BhAH/AQcBJgGFAf8BBwEmAYAB/wEHASgBgwH/AQcBKAGDAf8BBwEoAYMB/wEHASgBWAH/
AQcBKAFYAf8BBwEoAVgB/wEHASgBWAH/AQcBKAFTAf8BBwElAVAB/wEHASUBUAH/AQcBJQFQAf8BBwEl
AVAB/wEHASUBUAH/AQcBJQFQAf8BBwElAVAB/wEHASUBVQH/AQcBJQFVAf8BBwElAVUB/wEHASUBVQH/
AQcBJgGDAf8BBwEoAYMB/wEHASgBgwH/AQcBKAGDAf8BBwEoAYgB/wEDAR0BhwH/AQEBBgGDAf8CBwGR
Af9HAAEBAwYBCAMWAR4DOAFdA1UBtQNkAfEB8wH4AfwB/wHtA/8B8wP/AZABoAGqAf4DXwHgA0gBhQMf
ASwDBQEHLwAB/wMAAf8DAAH/AwAB/wMAAf9EAAMRAf8DtAH/AxEB/wHOAZABNwH/AdUBlAE5Af8B1QGU
ATkB/wHVAZQBOQH/AdUBlAE5Af8B1QGUATkB/wHVAZQBOQH/AdQBkwE5Af8B0AGRATcB/wG0AVcBKgH/
AYoBPQEdAf8BDwElATUB/wEAARMBUgH/AQABEwFNAf8BAAEaAVMB/wEyASsBJQH/AZIBQAEcAf8BuQGA
ASwB/wHSAZIBOAH/AdUBlAE5Af8B1QGUATkB/wHVAZQBOQH/AdUBlAE5Af8B1QGUATkB/wHVAZQBOQH/
AcUBiwE1Af8DGAH/A7QB/wMRAf8CAgGKAf8BBgEfAYcB/wEYAYUBqQH/AS8BqwHUAf8BSAHRAd4B/wFN
AdQB4QH/AVAB1AHhAf8BUgHUAeEB/wFSAdQB4QH/AVAB1AHhAf8BTQHUAeEB/wFNAdQB4QH/AU0B0wHg
Af8BTQHRAd4B/wFNAdEB3gH/AU0B0QHeAf8BTQHRAd4B/wFNAdEB3gH/AU0B0QHeAf8BTQHRAd4B/wFN
AdEB3gH/AU0B0QHeAf8BTQHRAd4B/wFNAdEB3gH/AU0B0QHhAf8BTQHUAeEB/wFNAdQB4QH/AUgB1AHh
Af8BMAGyAdgB/wEaAYUBrwH/AQYBHwGLAf8CAgGKAf9DAAEBAwUBBwMUARsDNQFWA1QBrwFaAl0B8AHz
AfgB/AH/AdQD/wHEAfwC/wHGAf4C/wHoA/8BcwGDAYcB+wFVAlYBsQMtAUUDBwEKLwAB/wMAAf8DAAH/
AwAB/wMAAf9EAAMRAf8DpwH/AxEB/wHOAYcBNgH/AdUBiwE4Af8B1QGLATgB/wHLAYQBNAH/Ab0BVQEt
Af8BxAGAATEB/wHAAVcBLwH/AZUBOwEcAf8BjQE4AR0B/wE2ASkBJQH/AQABHQFKAf8BAAECAUAB/wEY
AZEBsgH/AU0B1QHmAf8BAAE2AYkB/wEAAQgBRgH/AQABIQFBAf8BTAEvASAB/wGSAToBHAH/AbEBTgEo
Af8BwwGAATAB/wHDAYABMAH/AboBVAEsAf8B0wGKATcB/wHVAYsBOAH/AcUBggE0Af8DGAH/A6cB/wMR
Af8CAQGBAf8BCgErAZAB/wErAaEBwgH/ARwBVQGkAf8BEAEnAVYB/wERAScBhAH/ARIBJwGIAf8BEwEn
AYgB/wETAScBgQH/ARIBJwGBAf8BEQEnAYEB/wERAScBVgH/AREBJwFVAf8BEQEnAVUB/wERAScBVQH/
AREBJwFVAf8BEQEnAVUB/wERAScBVQH/AREBJwFVAf8BEQEnAVUB/wERAScBgQH/AREBJwGBAf8BEQEn
AYEB/wERAScBgQH/ARMBKAGIAf8BFgErAYgB/wERAScBhAH/ARABJwFWAf8BHAFXAaQB/wErAaEBwwH/
AQoBKwGRAf8CAQGBAf8/AAEBAwQBBgMSARgDMgFQA1IBqQFZAmQB7AGQAaABqgH+AdkD/wHEAfwC/wHD
AfsC/wHDAfsC/wHXA/8CqAGqAf0BVwJZAb8DMgFQAwgBCy8AAf8DAAH/AwAB/wMAAf8DAAH/RAADEQH/
A5sB/wMRAf8BzgFZATQB/wHVAYMBNgH/AcsBVwEyAf8BgwEwAR0B/wFCASgBIAH/AVABKwEeAf8BSAEp
AR8B/wEZASYBMQH/AQABIAFOAf8BAAEIAUoB/wEAASUBVAH/AUcB0AHnAf8BUgHdAfEB/wE3AacBsQH/
AVgB4QH3Af8BLgGpAcUB/wEAAQkBQAH/AQABFAFRAf8BAAEjAUYB/wEqASYBKAH/AU4BKgEeAf8BTwEq
AR4B/wE9ASgBJAH/AZQBNQEaAf8B0wGCATUB/wHFAVUBMgH/AxcB/wObAf8DEQH/AgEBWAH/AQsBLAGL
Af8BJAGcAb0B/wECARMBQwH/AQABBgFPAf8BBwEtAZgB/wEGATABnQH/AQYBLgGdAf8BBgEtAZwB/wEG
AS0BlgH/AQUBLAGVAf8BCAEqAZEB/wEAAQQBTwH/AgABRgH/AgABRgH/AgABRgH/AgABRgH/AgABRgH/
AQABAgFNAf8BBwEmAZIB/wEGASgBlAH/AQABHgGNAf8BCgE0AZgB/wEAARcBjgH/AQoBNAGfAf8BBgEk
AZMB/wECAQcBTwH/AgABQAH/AQIBEQFBAf8BJAGXAbQB/wELASsBiAH/AgEBWAH/OwABAQMEAQYDEAEV
AywBQwFPAlABmwFYAmIB6QGQAaABqgH+Ad4D/wHGAf4C/wHDAfsC/wHDAfsC/wHIA/8B7AP/AXMBhAGH
AfsBVQJWAbEDLQFFAwcBCi8AAf8DAAH/AwAB/wMAAf8DAAH/DgAC/wIAAv8CAAL/AgAC/wIAAv8kAAMR
Af8DkwH/AxEB/wHMAVEBMgH/AdMBVAE0Af8BzgFRATIB/wGKAS0BGgH/AQABNQGEAf8BAAEtAY0B/wEA
ASUBiAH/AQABGwGBAf8BCQFQAZ8B/wFLAdUB5gH/AZAB7wH+Af8BLgGbAbwB/wE6ARABJwH/AZEBDAEl
Af8BKQEmAT4B/wFFAcoB5gH/AZAB7QH6Af8BNQG0AcoB/wEAATYBkgH/AQABHQGBAf8BAAEmAYcB/wEA
ATcBlgH/ARcBJwE6Af8BkwEvARkB/wHSAVQBNAH/AcMBTQEwAf8DFgH/A5MB/wMRAf8CAQFYAf8BCwEt
AYsB/wEkAZ0BvQH/AQIBEwFKAf8BBQEsAZUB/wFBAdYB6QH/AUIB1wHwAf8BQQHSAfAB/wFBAdEB8AH/
AUEB0QHuAf8BPgHNAesB/wE7AcUB5wH/AQABEAGKAf8CAwFQAf8CAwFQAf8CAwFQAf8CAwFQAf8BAgEE
AVEB/wEAARIBjAH/ATwBwQHiAf8BNgHEAegB/wEUAYoBzwH/AUoB4QH1Af8BAQFKAcMB/wFMAeEB9QH/
AScBogHVAf8BAAERAZIB/wIAAUwB/wECAREBSQH/ASIBlAG0Af8BCwEoAYgB/wIBAVgB/zgAAwQBBQMN
ARIDKAE8A0oBigFeAmEB2gKoAakB/QHiA/8BxgH+Av8BwwH7Av8BwwH7Av8ByQP/AekD/wKoAakB/QFc
AmEB3ANHAYIDHQEqAwUBBy8AAf8DAAH/AwAB/wMAAf8DAAH/DgAC/wIAAv8CAAL/AgAC/wIAAv8kAAMR
Af8DjwH/AxEB/wHJAU4BMQH/AdABUQEzAf8B0AFRATMB/wGmATkBIQH/AR8BIwExAf8BBQFPAaMB/wE3
AasB0gH/AZIB6wH4Af8BiQHqAfcB/wE2AaIBvAH/ATYBIwE8Af8BmgEXAT0B/wG/ASoBiwH/AcEBLwGT
Af8BuwEoAYIB/wGCARABLwH/AS4BPwFZAf8BRQHDAdsB/wGTAfAB/AH/AYYB4QHzAf8BJAGRAbkB/wEA
AUoBnwH/AUwBJAEcAf8BvAFGASsB/wHQAVEBMwH/AcABSgEvAf8DFgH/A48B/wMRAf8CAQFYAf8BCwEt
AYsB/wEkAZ0BvQH/AQIBEwFOAf8BAgEuAZ8B/wFIAeIB9QH/AU8B7AL/AVQB7gL/AVUB7gL/AVUB7gL/
AVUB7gL/ATQBwAHrAf8BAAEQAY8B/wIDAVUB/wIDAVIB/wIDAVAB/wIDAVEB/wEAAQgBggH/ARYBVAG+
Af8BRgHaAfgB/wEWAZgB3wH/ATUBxAHxAf8BKQG2AeoB/wEhAawB5QH/AUEB1gH5Af8BGwGfAeEB/wEk
AZ8B0wH/AQIBHQGMAf8BAQERAUwB/wEfAZQBtAH/AQsBKAGIAf8CAQFYAf8kAAMBAQIDAwQEBAYECAEL
Aw8BFAMkATYBRgJHAYABWAJcAdEBcwGEAYgB+wHpA/8ByAP/AcMB+wL/AcMB+wL/AcwD/wHwA/8BcwGE
AYgB+wFZAl0B1wNMAZIDKwFCAw0BEgMDAQQvAAH/AwAB/wMAAf8DAAH/AwAB/w4AAv8CAAL/AgAC/wIA
Av8CAAL/JAADEQH/A48B/wMRAf8BxwFMATEB/wHOAU8BMwH/Ac4BTwEzAf8BpgE5ASIB/wIfAS0B/wEA
AT8BkAH/AR4BhwGpAf8BEQEmAT4B/wFFAQkBIAH/AaUBGAFAAf8BwgErAYwB/wHLAToBpAH/AdIBQgGx
Af8B1AFDAbQB/wHRAUABsAH/AcoBOQGiAf8BvgEpAYQB/wGSARIBNgH/ATcBDgEgAf8BCQE5AVcB/wEj
AYoBrAH/AQABNAGIAf8BSwEkARwB/wG9AUUBLAH/Ac4BTwEzAf8BvwFJAS8B/wMWAf8DjwH/AxEB/wIB
AVgB/wELASwBiwH/ASQBnAG5Af8BAgETAUgB/wECAS4BnwH/AUgB4QH1Af8BTQHnAv8BTgHoAv8BTwHo
Av8BUQHqAv8BVQHuAv8BNAHAAesB/wEAARABjgH/AgMBTwH/AgMBTgH/AgMBTQH/AgMBTQH/AQABCQGB
Af8BLAGhAdQB/wFNAeYC/wEDAUYBwQH/AU0B5gL/ARUBjwHUAf8BOgHJAfEB/wE6AckB8QH/ARUBjwHV
Af8BQwHcAfUB/wEHASwBmAH/AQIBEQFHAf8BIwGUAbQB/wELASgBiAH/AgEBWAH/HAADAgEDAwYBCAMN
AREDFwEgAyIBMgMqAUADLAFDAzEBTgNHAYIBWQJcAcwBagFzAXcB+gHtA/8ByQP/AcMB+wL/AcMB+wL/
Ac0D/wH4A/8BXAFuAXIB+AFcAl4BzgFIAkkBhwMrAUIDEQEXAwQBBgMAAQEvAAH/AwAB/wMAAf8DAAH/
AwAB/w4AAv8CAAL/AgAC/wIAAv8CAAL/JAADEQH/A5AB/wMRAf8BxQFKATAB/wHMAU0BMgH/AcwBTQEy
Af8BpAE2ASEB/wEcAR8BLwH/AQABOQGJAf8BAAE+AY0B/wEoARgBMgH/AbwBIQFWAf8BxAExAZwB/wHR
AUEBrwH/AdwBTQHBAf8B5gFWAc0B/wHpAVkB0gH/AeYBVwHNAf8B3QFOAcEB/wHQAUEBrwH/AcUBMgGb
Af8BswEdAUUB/wEAASYBRwH/AQoBRQGQAf8BAAEuAYMB/wFKASMBHAH/AbsBRAErAf8BzAFNATIB/wG9
AUcBLgH/AxYB/wOQAf8DEQH/AgEBWAH/AQsBLAGLAf8BJAGbAbgB/wECARIBRgH/AQUBJgGSAf8BMQG7
AeAB/wE1AbwB5gH/ATUBvwHmAf8BPAG/AeQB/wE8AcEB5wH/ATwBxQHrAf8BNwG/AeQB/wEAAQ0BhAH/
AgIBTQH/AgEBTQH/AgABTQH/AgABTQH/AQABAQFQAf8BAAEKAYUB/wEAARABjQH/AQABCwGIAf8BAAEQ
AY8B/wEAAQwBiwH/AQABDwGUAf8BAAEQAZYB/wEAARABkwH/AQABEAGSAf8BAAEEAVEB/wECAREBRgH/
ASQBlAG0Af8BCwEoAYgB/wIBAVgB/xcAAQEDBAEFAwoBDgMaASUDMQFNA0QBeQFPAlABmwFTAlQBrANU
Aa4DVQG1AVoCXgHYA20B9wH0A/8BygP/AcMB+wL/AcQB/AL/AdEH/wNtAfcBWAJbAcYDQwF4AyYBOAMQ
ARUDBAEGAwABATMAAf8DAAH/AwAB/wMAAf8DAAH/DgAC/wIAAv8CAAL/AgAC/wIAAv8kAAMRAf8DkgH/
AxEB/wHDAUcBLwH/AcoBSgExAf8ByAFJATAB/wGMASgBFwH/AQUBHgE7Af8BAAE+AYwB/wEAAUoBnQH/
AUUBFgEyAf8BwgErAZAB/wHNATwBqwH/Ad4BUAHEAf8B7wGHAdoB/wH7AZMB7AH/Af0BmAH0Af8B+wGT
AewB/wHvAYcB2gH/Ad4BUAHEAf8BzgE8AawB/wG9ASgBhAH/ARQBKAFIAf8BEgFRAZ0B/wEAAS0BhAH/
ATgBHwEhAf8BsAE8ASYB/wHKAUoBMQH/AbsBRAEtAf8DFgH/A5IB/wMRAf8CAQFYAf8BCwEsAYoB/wEk
AZcBtgH/AQIBEQFGAf8BAAECAU8B/wEAAQ8BjwH/AQABEQGXAf8BAAERAZcB/wEAAREBjwH/AQABEQGP
Af8BAAERAY8B/wEAAQ4BiAH/AQABAgFRAf8CAAFNAf8CAAFNAf8CAAFNAf8CAAFNAf8CAAFNAf8CAAFN
Af8CAgFNAf8CAwFPAf8CAwFVAf8CAwFVAf8CAwFZAf8CAwGDAf8CAwGDAf8CAwFYAf8CAAFHAf8BAgER
AUYB/wEkAZQBtAH/AQsBKAGIAf8CAQFYAf8TAAEBAwQBBgMPARQDJAE1AT8CQAFvA1YBswFbAmEB4QNl
AfQBZAFxAXYB+gFcAW4BcgH4A1kB9QFTAW4BdQL6A/8BzQP/AcMB+wL/AcQB/AL/AdQD/wHzAfgB/AH/
AlkBWgH1AVYCWAHBA0ABcAMgAS4DCwEPAwQBBQMAAQEbAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/
AwAB/wMAAf8DAAH/AwAB/wMAAf8OAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/
AgAC/wwAAxEB/wOWAf8DEQH/AcEBRAEvAf8ByAFHATAB/wHEAUUBLgH/AYcBJQEXAf8BAAEkAU4B/wES
AUwBlwH/AQQBRwGXAf8BgAEVATYB/wHGATEBmgH/AdUBRQG3Af8B6gGAAdIB/wH8AZYB8QL/AagB/gL/
Aa8D/wGoAf4B/wH8AZYB8QH/AeoBgAHSAf8B1gFFAbcB/wHFAS8BkwH/ASsBIQE9Af8BEAFTAaAB/wEA
ATkBjQH/ARYBHgEyAf8BjAEmARYB/wHHAUcBMAH/AbkBQQEtAf8DFwH/A5YB/wMRAf8CAQFXAf8BCwEq
AYUB/wEhAZUBtAH/AQEBEQFGAf8CAAFHAf8CAwFYAf8CAwGDAf8CAwGDAf8CAwFVAf8CAwFVAf8CAwFS
Af8CAwFOAf8CAAFNAf8CAAFNAf8CAAFNAf8CAAFNAf8CAAFNAf8CAAFNAf8CAAFNAf8CAQFNAf8CAwFP
Af8CAwFVAf8CAwFVAf8CAwFVAf8CAwGDAf8CAwGDAf8CAwFYAf8CAAFHAf8BAgERAUYB/wEkAZQBtAH/
AQsBKAGIAf8CAQFYAf8QAAMCAQMDCwEPAyMBNAFEAkUBfAFXAloBxQNtAfcB8wH4AfwB/wHxA/8B5wP/
AeoD/wHvA/8B5AP/Ac0D/wHDAfsC/wHGAf4C/wHaA/8B8wH4AfwB/wFkAmUB9AFWAlgBvAM9AWkDHQEq
AwoBDQMDAQQjAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8OAAL/
AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wwAAxEB/wOaAf8DEQH/Ab4BQwEu
Af8BxQFFAS8B/wGvATkBJgH/AUUBHwEaAf8BAAEuAYsB/wEpAYkBqwH/AQIBNgFZAf8BqQEdAUcB/wHI
ATUBoQH/AdoBSgG8Af8B8AGIAdwB/wH+AZ8B+gL/AbQD/wHCA/8BtAL/Af4BnwH6Af8B8AGIAdwB/wHb
AUoBvQH/AckBNAGdAf8BUQEWATUB/wEMAVABnQH/ARgBVQGiAf8BAAEjAU4B/wGGASQBFgH/AcMBRAEu
Af8BtgFAASwB/wMXAf8DmgH/AxEB/wIBAVYB/wELASgBgwH/ASMBlAG0Af8BAgERAUYB/wIAAUcB/wID
AVgB/wIDAYMB/wIDAYMB/wIDAVUB/wIDAVUB/wIDAVAB/wIDAU0B/wIAAU0B/wIAAU0B/wIAAU0B/wIA
AU0B/wIAAU0B/wIAAU0B/wIAAU0B/wIAAU0B/wIDAU0B/wIDAVEB/wIDAVUB/wIDAVUB/wIDAYMB/wID
AYMB/wIDAVgB/wIAAUcB/wECAREBRgH/ASQBlAG0Af8BCwEoAYgB/wIBAVgB/xAAAwMBBAMYASEDPQFp
AVcCWQG/AW0BcwF3AfoB8QP/Ac4D/wHEAfwC/wHDAfsC/wHDAfsC/wHDAfsC/wHDAfsC/wHDAfsC/wHG
Af4C/wHeA/8BkAGgAaoB/gFOAl0B8AFVAlcBtwM7AWMDGgElAwkBDAMDAQQnAAH/AwAB/wMAAf8DAAH/
AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8OAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/
AgAC/wIAAv8CAAL/AgAC/wwAAxEB/wOfAf8DEQH/AbsBQAEtAf8BwAFBAS0B/wGGASMBFQH/AQgBHQE2
Af8BAAE8AZQB/wEwAZUBuQH/ASABJwFCAf8BuAEgAVQB/wHHATUBoAH/AdkBSQG7Af8B7wGFAdoB/wH+
AZ0B+gL/AbED/wG8A/8BsQL/Af4BnQH6Af8B7wGFAdoB/wHZAUkBvAH/AccBNAGfAf8BpAEaAUMB/wEL
AUABiQH/ATYBlwG4Af8BAAEsAYoB/wFEAR4BGwH/Aa0BNwElAf8BswE9ASsB/wMXAf8DnwH/AxEB/wIB
AVYB/wELASgBgwH/ASQBlAG0Af8BAgERAUYB/wEAAQ4BWAH/AQoBOAGsAf8BCwE9AbYB/wEJATsBsAH/
AQMBKgGiAf8BAAEUAY4B/wEAAQcBWAH/AgMBTwH/AgABTQH/AgABTQH/AgABTQH/AgABTQH/AgABTQH/
AgABTQH/AgABTQH/AgABTQH/AgMBTQH/AgMBUAH/AgMBVQH/AgMBVQH/AgMBgwH/AgMBgwH/AgMBWAH/
AgABRwH/AQIBEQFGAf8BIwGUAbQB/wELASgBiAH/AgEBWAH/EAADBAEGAyMBMwFNAk4BlQNlAfQE/wHa
A/8B2QP/AeAD/wHdA/8BzwP/AcUB/QL/AcMB+wL/AcMB+wL/AdMD/wGQAaABqgH+AU4CXQHwAVUCVwG3
AzoBYAMYASIDCAELAwIBAysAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/
AwAB/w4AAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/DAADEQH/A6QB/wMR
Af8BuQE9ASsB/wGgAS8BHwH/AT8BGwEZAf8BAAEdAVUB/wEfAVQBogH/AQcBRQGSAf8BTQENAR4B/wG3
ASABVwH/AcIBMQGbAf8B0wFDAbMB/wHmAVgBzwH/AfoBkQHrAv8BoAH8Av8BqAH+Av8BoAH8Af8B+gGR
AesB/wHmAVgBzwH/AdMBQwG0Af8BwwEwAZoB/wG2AR4BSwH/ASEBGQEtAf8BGwFWAaQB/wEAAToBkQH/
AQMBFQExAf8BhAEhARMB/wGpATYBJgH/AxcB/wOkAf8DEQH/AgEBVwH/AQsBKAGFAf8BJAGUAbQB/wEC
AREBRgH/AQkBLgGSAf8BSAHkAfUB/wFNAekC/wFGAeAB+AH/ASkBsQHfAf8BEQFGAbUB/wEDARUBigH/
AQMBBQFPAf8CAAFNAf8CAAFNAf8CAAFNAf8CAAFNAf8CAAFNAf8CAAFNAf8CAAFNAf8CAQFNAf8CAwFO
Af8CAwFSAf8CAwFXAf8BAAEIAYQB/wEAAQ0BjQH/AQABCwGMAf8BAgEGAYMB/wIAAUgB/wEBAREBRgH/
ASEBlQG0Af8BCwEqAYgB/wIBAVgB/xAAAwQBBgMiATIBTAJNAZEDZAHxA6gB/QGEAZkBpwH+AqgBqQH9
AWIBgQGHAfsBZAF2AXwB/AHnAfEB+AH/AdUD/wHDAfsC/wHDAfsC/wHgA/8BXwF2AYUB+wFaAl0B0wNC
AXQDGgElAwYBCAMBAQIvAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMA
Af8OAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wwAAxEB/wOqAf8DEQH/
AakBMwEkAf8BRwEcARkB/wE4AZYBtQH/AVEBwQHkAf8BlAHYAesB/wEAASsBiAH/AQABHgE/Af8BoQEW
AT4B/wG/ASkBjgH/AcoBOQGmAf8B2gFKAbwB/wHoAYEB0gH/AfQBigHhAf8B+QGQAegB/wH0AYoB4QH/
AegBgQHSAf8B2gFKAb0B/wHLATkBpQH/AcABKAGKAf8BVwEVATIB/wEAARwBTAH/ARgBVgGpAf8BnAHh
Ae8B/wFDAbAB1gH/ASsBJAEsAf8BkAEoARsB/wMYAf8DqgH/AxEB/wIBAVgB/wELASgBiAH/ASQBlAG0
Af8BAgERAUYB/wEAARgBigH/ARIBjAHPAf8BEgGTAdwB/wETAY8B1QH/AQkBUAHDAf8BAwEqAaUB/wEA
AQ4BiQH/AQABBAFUAf8CAgFNAf8CAAFNAf8CAAFNAf8CAAFNAf8CAAFNAf8CAAFNAf8CAAFNAf8CAgFN
Af8CAwFPAf8CAwFXAf8BAwESAY4B/wEQAUgBuAH/ASYBmgHSAf8BHQGNAcsB/wEHAS8BpQH/AQABBAFQ
Af8BAgERAUYB/wEkAZcBtgH/AQsBLAGKAf8CAQFYAf8QAAMDAQQDFgEeAzYBWQFPAlEBnAFXAlkBvwFZ
AlwByQFaAl0BygFcAl4BzgFYAl8B4wFXAmIB9gHwA/8BwwH7Av8BwwH7Av8B3QP/AW4BegF+AfwDWQHH
AzcBWwMPARQDAAEBTwAB/wMAAf8DAAH/AwAB/wMAAf8OAAL/AgAC/wIAAv8CAAL/AgAC/yQAAxEB/wOw
Af8DEQH/Aa8BNAEnAf8BVgEbARMB/wE5ARYBGAH/ATQBUAGFAf8BsAHuAfcB/wGbAeMB7wH/AQABLgGR
Af8BAwEqAUMB/wGlARoBRgH/AcABLQGVAf8BywE7AakB/wHWAUYBtwH/Ad4BUAHCAf8B4QFSAcYB/wHe
AVABwgH/AdYBRgG3Af8BywE7AagB/wHDASwBkQH/AYEBFgE4Af8BAAE0AYAB/wELAU4BpQH/AbcB8wH6
Af8BlgHaAeQB/wEsASEBKQH/AUwBGgEVAf8BowEvASQB/wMYAf8DsAH/AxEB/wIBAVgB/wELASgBiAH/
ASQBlAG0Af8BAgERAUYB/wEAASYBjwH/ATIBxwHoAf8BOQHQAfMB/wE6AcsB8gH/ATABuwHmAf8BGgGN
AcwB/wEGATEBpQH/AQEBDQGBAf8BAAECAU0B/wIAAU0B/wIAAU0B/wIAAU0B/wIAAU0B/wIAAU0B/wIA
AU0B/wIAAU0B/wIDAU0B/wEAAQYBVwH/AQwBRgG1Af8BOwHQAfEB/wFLAekB/QH/AUgB5QH7Af8BJAGp
AdwB/wEAARUBhAH/AQIBEgFGAf8BJAGbAbgB/wELASwBiwH/AgEBWAH/EAADAgEDAwoBDQMcAScDLwFJ
AzwBZgNEAXoDSAGEAU4CTwGXAVkCXAHMAVMCZAHxBP8BwwH7Av8BwwH7Av8B1wP/AqgBqgH9A1sByAM3
AVoDCwEPUwAB/wMAAf8DAAH/AwAB/wMAAf8OAAL/AgAC/wIAAv8CAAL/AgAC/yQAAxEB/wO2Af8DEQH/
AbABMwEnAf8BsgEzASYB/wGfASoBHgH/AVcBGgERAf8BHgEWASUB/wGTAdQB6AH/AZYB3gHvAf8BAAE9
AZYB/wEWASEBOAH/AbgBHgFRAf8BvwErAZMB/wHGATQBoAH/AcsBOgGmAf8BzQE8AaoB/wHLAToBpgH/
AcYBNAGgAf8BwAErAZEB/wGdARkBQgH/AQABNgFQAf8BCwFNAagB/wGvAesB+AH/AUoBoAHDAf8BPAIV
Af8BWQEaARAB/wGtATEBJAH/AakBMQEmAf8DGAH/A7YB/wMRAf8CAQFYAf8BCwEoAYgB/wEjAZQBtAH/
AQIBEQFGAf8BAAEhAY4B/wErAcMB5wH/ATIBzgHyAf8BMgHIAfIB/wEoAbQB5gH/ARUBigHKAf8BBQEv
AZ8B/wEAAQkBUwH/AgABRAH/AgABQgH/AgABQgH/AgABQgH/AgABQgH/AgABQgH/AgABQgH/AgABQgH/
AgABQwH/AQABAwFRAf8BHAGVAcsB/wFAAekB/QH/AUIB7gL/AUIB7gL/ATQB1QHwAf8BAAEiAZAB/wEC
ARMBRgH/ASQBnAG5Af8BCwEsAYsB/wIBAVgB/xMAAQEDBwEJAxYBHwMvAUkBQQJCAXMBTAJNAZEBUAJS
AaMBVQJXAboDXwHgAUkCYgH2AfMD/wHDAfsC/wHDAfsC/wHdA/8BbgF6AX4B/AFXAloBvQMxAU8DCQEM
UwAB/wMAAf8DAAH/AwAB/wMAAf8OAAL/AgAC/wIAAv8CAAL/AgAC/yQAAxEB/wO7Af8DEQH/Aa0BMAEm
Af8BswEyAScB/wGzATIBJwH/AagBLQEiAf8BVgEXARAB/wEeARYBJQH/AZEB0QHqAf8BVQG6Ad0B/wEA
AUYBkwH/AT8BEwEuAf8BuAEcAVQB/wG8ASQBhwH/AcABJgGKAf8BvwEnAYwB/wHAASYBigH/AbwBIwGG
Af8BtAEbAUwB/wESASQBOQH/AQABTAGiAf8BnQHeAfEB/wFKAaABxgH/AT4BFAEVAf8BlgEkARsB/wGy
ATIBJwH/AbMBMgEnAf8BpgEuASUB/wMZAf8DuwH/AxEB/wIBAVgB/wELASgBiAH/AR8BlAG0Af8BAQER
AUYB/wEAARMBhQH/AQkBggHKAf8BCAGOAdcB/wEIAYoB1wH/AQgBhgHPAf8BCAFQAcAB/wECATcBqgH/
AQABGAGMAf8CAAE/Af8CAAE5Af8CAAE5Af8CAAE5Af8CAAE5Af8CAAE5Af8CAAE5Af8CAAE7Af8CAAE9
Af8CAAFNAf8BEgGAAcEB/wE1AeMB+wH/ATkB7gL/ATkB7gL/ASYBxgHqAf8BAAEaAYwB/wECARMBSAH/
ASQBnQG9Af8BCwEtAYsB/wIBAVgB/xMAAQEDCgENAyoBQAFOAk8BlwFYAlwB0QNcAeoDZwHyAlkBWgH1
AWIBgQGHAfsB2gHqAfUB/wHYA/8BwwH7Av8BxQH9Av8B7wP/A2IB9gFQAlIBowMnAToDBwEJUwAB/wMA
Af8DAAH/AwAB/wMAAf8OAAL/AgAC/wIAAv8CAAL/AgAC/yQAAxEB/wPAAf8DEQH/AakBLgEkAf8BrwEv
ASUB/wGvAS8BJQH/Aa8BLwElAf8BpQEqASEB/wFSARUBDgH/AR8BKAE9Af8BmAHaAfEB/wErAY8BvAH/
AQABMQFNAf8BTgEJAR8B/wFCARUBMAH/ATEBGwE2Af8BMQEbATYB/wE1ARoBNQH/AUoBEQEsAf8BOAEM
AR0B/wEAAUEBkAH/AVkBvAHgAf8BhAG7AeEB/wEwARIBGAH/AZEBIQEYAf8BrwEvASUB/wGvAS8BJQH/
Aa8BLwElAf8BogEsASMB/wMZAf8DwAH/AxEB/wIBAVkB/wELASgBiwH/ASIBlAG0Af8BAAENAUIB/wEA
ASEBjAH/ASoB2gHrAf8BLwHkAfUB/wEvAeIB9QH/ASoB2QHzAf8BJAHCAekB/wEVAZMB0QH/AQUBMQGj
Af8CAAE2Af8CAAEvAf8CAAEvAf8CAAEvAf8CAAEvAf8CAAEvAf8CAAEvAf8CAAEyAf8CAAEyAf8CAAE6
Af8BAAEgAZAB/wEWAZ4B1gH/ASoB0QHwAf8BJAHDAeoB/wELAVEBvQH/AQABBAFPAf8BAAEPAUgB/wEk
AZ0BvQH/AQsBLQGOAf8CAQFZAf8TAAEBAw8BFAM7AWMDXgHYBP8B+wP/AfMD/wHuA/8B4gP/AdED/wHG
Af4C/wHEAfwC/wHWA/8B5wHxAfgB/wFXAlwB3wNEAXkDGAEiAwQBBlMAAf8DAAH/AwAB/wMAAf8DAAH/
DgAC/wIAAv8CAAL/AgAC/wIAAv8kAAMRAf8DxwH/AxEB/wGmASoBIwH/AawBKwEkAf8BrAErASQB/wGs
ASsBJAH/AawBKwEkAf8BmgEjARwB/wFJARMBEQH/ATwBkAGyAf8BlgHSAfEB/wEBAUQBogH/AQABPQGL
Af8BAAFFAZMB/wEAAUsBmgH/AQEBTQGcAf8BAAFKAZcB/wEAAUUBkwH/AQABOAGLAf8BJgGJAbsB/wGY
AdgB8wH/ASABLgFEAf8BUQETAQ4B/wGrASoBIwH/AawBKwEkAf8BrAErASQB/wGsASsBJAH/AZ8BKQEi
Af8DGQH/A8cB/wMRAf8CAwGFAf8BDwEvAY0B/wEkAZcBtAH/AQABCwFAAf8BAAECAUEB/wEAASUBjAH/
AQABJwGSAf8BAAEnAZIB/wEAASUBkAH/AQABIAGGAf8BAAETAVMB/wEAAQQBQwH/AgABLAH/AgABJgH/
AgABJgH/AgABJgH/AgABJgH/AgABJgH/AgABJgH/AgABJgH/AgABLAH/AgABLQH/AgABOAH/AQABCwFT
Af8BAAEhAYoB/wEAARkBhQH/AQABBAFMAf8CAAE5Af8BAAEMAUEB/wEkAZwBuQH/AQ8BMAGRAf8CAwGF
Af8TAAEBAw0BEgM4AVwBWAJbAcsBkAGdAaYB/gHqA/8BzQP/AcQB/AL/AcMB+wL/AcMB+wL/AcYB/gL/
AdgD/wHzAfgB/AH/A10B8ANSAakDLgFHAwwBEAMCAQNTAAH/AwAB/wMAAf8DAAH/AwAB/0QAAxEB/wPP
Af8DEQH/AaMBJwEhAf8BqAEoASIB/wGoASgBIgH/AagBKAEiAf8BqAEoASIB/wGoASgBIgH/AY0BGwEW
Af8BJAEWASEB/wGMAdIB8wH/AcMB8AH4Af8B1QHuAfcB/wHgAfcB/AH/AecD/wHoA/8B5gH+Av8B3QHy
AfoB/wHNAe0B9wH/AbUB7wH7Af8BSgGrAc8B/wE/AQ8BEQH/AZYBIAEaAf8BqAEoASIB/wGoASgBIgH/
AagBKAEiAf8BqAEoASIB/wGdASYBIAH/AxoB/wPPAf8DEQH/AgkBigH/ARABMgGYAf8BJQGVAbYB/wEP
ATYBiAH/AQEBDwE/Af8BAQEPAUQB/wEBAQ8BRAH/AQEBDwFEAf8BAQEPAT4B/wEBAQ8BPgH/AQEBDwE+
Af8BAQEPATkB/wEAAQkBOAH/AQABCQE4Af8BAAEJATgB/wEAAQkBOAH/AQABCQE4Af8BAAEJATgB/wEA
AQkBOAH/AQABCQE4Af8BAQEPATkB/wEBARABPwH/AQEBEQFAAf8BAQERAUAB/wEBAREBRgH/AQEBEQFG
Af8BAQEQAUUB/wEBAQ8BPwH/AQ0BNgGHAf8BJAGUAbUB/wEQATIBmAH/AgkBigH/EwABAQMHAQoDJgE4
A0oBiwFZAlwBzwFfAW4BcgH4AfMB+AH8Af8B8gP/AeYD/wHoA/8B+gP/AZABoAGqAf4DYQHuA1UBsgM4
AVwDFQEdAwUBBwMAAQFTAAH/AwAB/wMAAf8DAAH/AwAB/0QAAxEB/wPXAf8DEQH/AZ8BJAEgAf8BpAEl
ASEB/wGkASUBIQH/AaQBJQEhAf8BpAElASEB/wGkASUBIQH/AZkBIAEcAf8BOQENAREB/wGvAdwB5AH/
AeIB8AHyAf8BjQGkAa8B/wE9AUMBTwH/ASsBJwE1Af8BLAEoATYB/wEuASsBOAH/AUgBVAGGAf8BpQHA
AcUB/wHvAvsB/wE0AYIBlwH/AUoBDgENAf8BowEkASAB/wGkASUBIQH/AaQBJQEhAf8BpAElASEB/wGk
ASUBIQH/AZkBIwEfAf8DGgH/A9cB/wMRAf8CCgGUAf8BDwEtAZsB/wEwAaIBwwH/AUMBtwHNAf8BPwG5
Ac0B/wE/AbkBzQH/AT0BuQHNAf8BPAG5Ac0B/wE8AbkBzQH/ATwBuQHNAf8BPAG5Ac0B/wE8AbkBzQH/
ATwBuQHNAf8BPAG5Ac0B/wE8AbkBzQH/ATwBuQHNAf8BPAG5Ac0B/wE8AbkBzQH/ATwBuQHNAf8BPAG5
Ac0B/wE/AbkBzQH/AT8BvAHPAf8BPwG/AdIB/wE/Ab8B0gH/AT8BvwHSAf8BPwG/AdIB/wE9AbwBzwH/
ATwBuQHNAf8BOwG2AcgB/wErAZ4BwAH/AQ8BLAGbAf8CCgGUAf8UAAMEAQUDEQEXAykBPwNEAXkBVQJW
AbQBXAJhAdwDXwHzAWQBcQF2AfoBZAFxAXYB+gNdAe0BWwJeAdABUAJRAZ8DNgFZAxgBIQMHAQoDAQEC
VwAB/wMAAf8DAAH/AwAB/wMAAf9EAAMRAf8D3wH/AxEB/wGcASEBHwH/AaEBIgEgAf8BoQEiASAB/wGh
ASIBIAH/AaEBIgEgAf8BoQEiASAB/wGbAR8BHQH/AT8BDAEPAf8BjwGWAaEB/wEtAQoBEgH/AUcCDAH/
AUoBDAELAf8BgQEUARIB/wGBARQBEgH/AYEBFAESAf8BSQEMAQsB/wFEAQwBDQH/ASEBFQEkAf8BUQFV
AYgB/wFJAQwBCwH/AaABIQEfAf8BoQEiASAB/wGhASIBIAH/AaEBIgEgAf8BoQEiASAB/wGWASABHgH/
AxsB/wPfAf8DEQH/AgsBngH/AQwBEwGUAf8BGwE1AZ8B/wEuAVUBrgH/ATEBWQGrAf8BMQFZAasB/wEv
AVkBqwH/AS4BWQGnAf8BLgFZAaYB/wEsAVYBpgH/ASgBUwGmAf8BKAFTAaIB/wEoAVMBoQH/ASgBUwGh
Af8BKAFTAaEB/wEoAVMBoQH/ASgBUwGhAf8BKAFTAaEB/wEoAVMBoQH/ASgBUwGhAf8BLAFTAaIB/wEs
AVMBpgH/AS8BVgGmAf8BMQFZAaYB/wExAVkBpwH/ATEBWQGrAf8BLwFZAasB/wEuAVkBqwH/ASsBVQGu
Af8BGQE1AZ8B/wEMARMBlAH/AgsBngH/FwABAQMEAQYDDAEQAxwBKAMxAU0DQgF1A04BmQFTAlUBrQNS
AakDSwGOATwCPQFnAykBPgMUARsDBwEJAwIBA1sAAf8DAAH/AwAB/wMAAf8DAAH/RAADTAHzA98B/wMo
Af8BigIbAf8BmwEdAR4B/wGbAR0BHgH/AZsBHQEeAf8BmwEdAR4B/wGbAR0BHgH/AZoBHAEdAf8BRAEJ
AQoB/wE+AQkBDAH/AUYCCQH/AZkBHAEdAf8BmgEdAR4B/wGbAR0BHgH/AZsBHQEeAf8BmwEdAR4B/wGa
ARwBHQH/AZIBGQEaAf8BRQIJAf8BOwEJAQ0B/wFGAgkB/wGaAR0BHgH/AZsBHQEeAf8BmwEdAR4B/wGb
AR0BHgH/AZsBHQEeAf8BVgEZARoB/wMwAf8D3QH/A04B8AIQAaQB/wILAZ4B/wIKAZQB/wIJAY8B/wIJ
AYwB/wIJAYYB/wIJAYIB/wIEAVgB/wIDAVgB/wICAVUB/wIBAVIB/wIBAVAB/wIBAVAB/wIBAVAB/wIB
AVAB/wIBAVAB/wIBAVAB/wIBAVAB/wIBAVAB/wIBAVAB/wIBAVAB/wIBAVIB/wICAVUB/wIDAVgB/wIE
AVgB/wIJAYIB/wIJAYYB/wIJAYwB/wIJAY8B/wIKAZQB/wILAZ4B/wIQAaQB/xsAAQEDAgEDAwYBCAMM
ARADFgEeAyIBMgMqAUADKQE+Ax8BLAMSARkDCgENAwQBBgMBAQJfAAH/AwAB/wMAAf8DAAH/AwAB/0QA
A1cBvQO/Af8DlAH/ATwBGgEcAf8BigEZAR8B/wGTARcBHgH/AZMBFwEeAf8BkwEXAR4B/wGTARcBHgH/
AZMBFwEeAf8BkgEXAR0B/wGOARUBHAH/AZIBFwEeAf8BkwEXAR4B/wGTARcBHgH/AZMBFwEeAf8BkwEX
AR4B/wGTARcBHgH/AZMBFwEeAf8BkwEXAR4B/wGSARcBHQH/AY0BFQEbAf8BkgEXAR4B/wGTARcBHgH/
AZMBFwEeAf8BkwEXAR4B/wGTARcBHgH/AYABGgEfAf8BMQEZARsB/wO0Af8DtAH/A1QBrgITAawB/wIT
AakB/wITAaYB/wIOAaYB/wINAaYB/wINAaMB/wINAZ8B/wILAZ4B/wILAZcB/wILAZcB/wILAZYB/wIL
AZYB/wILAY4B/wILAY4B/wILAY4B/wILAY4B/wILAY4B/wILAY4B/wILAY4B/wILAY4B/wILAZYB/wIL
AZYB/wILAZcB/wILAZcB/wILAZ4B/wINAZ8B/wINAaMB/wINAaYB/wIOAaYB/wITAaYB/wITAakB/wIT
AawB/yQAAwEBAgMDBAQEBgEIAwYBCAMEAQYDAwEEAwABAWcAAf8DAAH/AwAB/wMAAf8DAAH/RAADNAFU
A0AB/wPuAf8DkwH/AycB/wMRAf8DEQH/AxEB/wMRAf8DEQH/AxEB/wMRAf8DEQH/AxEB/wMRAf8DEQH/
AxEB/wMRAf8DEQH/AxEB/wMRAf8DEQH/AxEB/wMRAf8DEQH/AxEB/wMRAf8DMAH/A7IB/wPqAf8DMAH/
Ay0BRQITAawB/wITAawB/wITAawB/wITAawB/wITAawB/wITAawB/wITAawB/wIPAagB/wIOAaQB/wIL
AaIB/wILAZ8B/wILAZ8B/wILAZwB/wILAZwB/wILAZwB/wILAZwB/wILAZwB/wILAZwB/wILAZwB/wIL
AZwB/wILAZ8B/wILAZ8B/wILAaIB/wIOAacB/wIPAagB/wITAawB/wITAawB/wITAawB/wITAawB/wIT
AawB/wITAawB/wITAawB//8ABQADSgGNAz8B/wPNAf8D+QH/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/wP7Af8D+wH/A+sB/wO9Af8DKwH/A0gBhwQAA0gBhQIUAawB/wIUAawB/wIUAawB/wIUAawB/wIU
AawB/wIUAawB/wIUAawB/wITAakB/wIRAakB/wIRAaYB/wINAaQB/wIMAaEB/wIMAaEB/wIMAaEB/wIM
AaEB/wIMAaEB/wIMAaEB/wIMAaEB/wIMAaEB/wINAaQB/wIRAaYB/wIRAakB/wITAasB/wIUAawB/wIU
AawB/wIUAawB/wIUAawB/wIUAawB/wIUAawB/wIUAawB/wNIAYX/AAkAAzcBWgNZAcMDKwH8AxIB/wMS
Af8DEgH/AxIB/wMSAf8DEgH/AxIB/wMSAf8DEgH/AxIB/wMSAf8DEgH/AxIB/wMSAf8DEgH/AxIB/wMS
Af8DEgH/AxIB/wMSAf8DEgH/AxIB/wNVAeoDVAGuAy0BRQgAAwcBCgNIAYUCFAGsAf8CFAGsAf8CFAGs
Af8CFAGsAf8CFAGsAf8CFAGsAf8CFAGsAf8CFAGsAf8CFAGrAf8CEwGqAf8CEgGqAf8CEgGoAf8CEgGk
Af8CEgGkAf8CEgGkAf8CEgGkAf8CEgGoAf8CEgGqAf8CEwGqAf8CFAGrAf8CFAGsAf8CFAGsAf8CFAGs
Af8CFAGsAf8CFAGsAf8CFAGsAf8CFAGsAf8CFAGsAf8DSAGFAwcBCv8AAQABQgFNAT4HAAE+AwABKAMA
AYADAAFAAwABAQEAAQEGAAEEFgAD//8A/wADAAHAAgABAwQACP8BgAIAAQEEAAL/AfgBBwT/CAAC/wHw
AQME/wgAAv8B4AEBAf8BwQL/CAAC/wHAAQEB/wHBAv8IAAL/AYABAQH/AcEC/wgAAv8BAAEBAf8BwQL/
CAAB/wH+AQABAQH/AcEC/wgAAf8B/AEAAQEB/wLBAf8IAAH/AfwBAAEBAf8CwQH/CAAB/wGAAQABAQH/
AsEB/wgAAf4CAAEBAf8CwQH/CAAB+AIAAQMB/wLBAf8IAAHwAgABBwHgAQEBwAEHCAAB8AIAAR8B4AEB
AcABBwgAAfACAAE/AeABAQHAAQcIAAHwAgABfwHgAQEBwAEHCAAB8AIAAf8B4AEBAcABBwgAAfABAAEB
Av8CwQH/CAAB8AEAAQMC/wLBAf8IAAHwAQABAwL/AsEB/wgAAfABAAEDAv8CwQH/CAAB8AEAAQMC/wLB
Af8IAAHwAQABAwL/AcEC/wgAAfABAAEDAv8BwQL/CAAB+AEAAQcC/wHBAv8IAAH4AQABDwL/AcEC/wgA
AfwBAAEfAv8BwQL/CAAB/wGAAX8C/wHBAv8IAAj/AYACAAEBBAAI/wHAAgABAwQACP8L
A/sB/wPrAf8DvQH/AyoB/wNIAYcEAANIAYUCEwGsAf8CEwGsAf8CEwGsAf8CEwGsAf8CEwGsAf8CEwGs
Af8CEwGsAf8CEgGpAf8CEAGpAf8CEAGmAf8CDAGkAf8CCwGhAf8CCwGhAf8CCwGhAf8CCwGhAf8CCwGh
Af8CCwGhAf8CCwGhAf8CCwGhAf8CDAGkAf8CEAGmAf8CEAGpAf8CEgGrAf8CEwGsAf8CEwGsAf8CEwGs
Af8CEwGsAf8CEwGsAf8CEwGsAf8CEwGsAf8DSAGF/wAJAAM3AVoDWQHDAysB/AMRAf8DEQH/AxEB/wMR
Af8DEQH/AxEB/wMRAf8DEQH/AxEB/wMRAf8DEQH/AxEB/wMRAf8DEQH/AxEB/wMRAf8DEQH/AxEB/wMR
Af8DEQH/AxEB/wMRAf8DVQHqA1QBrgMtAUUIAAMHAQoDSAGFAhMBrAH/AhMBrAH/AhMBrAH/AhMBrAH/
AhMBrAH/AhMBrAH/AhMBrAH/AhMBrAH/AhMBqwH/AhIBqgH/AhEBqgH/AhEBqAH/AhEBpAH/AhEBpAH/
AhEBpAH/AhEBpAH/AhEBqAH/AhEBqgH/AhIBqgH/AhMBqwH/AhMBrAH/AhMBrAH/AhMBrAH/AhMBrAH/
AhMBrAH/AhMBrAH/AhMBrAH/AhMBrAH/A0gBhQMHAQr/AAEAAUIBTQE+BwABPgMAASgDAAGAAwABQAMA
AQEBAAEBBgABBBYAA///AP8AAwABwAIAAQMEAAj/AYACAAEBBAAC/wH4AQcE/wgAAv8B8AEDBP8IAAL/
AeABAQH/AcEC/wgAAv8BwAEBAf8BwQL/CAAC/wGAAQEB/wHBAv8IAAL/AQABAQH/AcEC/wgAAf8B/gEA
AQEB/wHBAv8IAAH/AfwBAAEBAf8CwQH/CAAB/wH8AQABAQH/AsEB/wgAAf8BgAEAAQEB/wLBAf8IAAH+
AgABAQH/AsEB/wgAAfgCAAEDAf8CwQH/CAAB8AIAAQcB4AEBAcABBwgAAfACAAEfAeABAQHAAQcIAAHw
AgABPwHgAQEBwAEHCAAB8AIAAX8B4AEBAcABBwgAAfACAAH/AeABAQHAAQcIAAHwAQABAQL/AsEB/wgA
AfABAAEDAv8CwQH/CAAB8AEAAQMC/wLBAf8IAAHwAQABAwL/AsEB/wgAAfABAAEDAv8CwQH/CAAB8AEA
AQMC/wHBAv8IAAHwAQABAwL/AcEC/wgAAfgBAAEHAv8BwQL/CAAB+AEAAQ8C/wHBAv8IAAH8AQABHwL/
AcEC/wgAAf8BgAF/Av8BwQL/CAAI/wGAAgABAQQACP8BwAIAAQMEAAj/Cw==
</value>
</data>
</root>

281
Tab/PingForm.Designer.cs generated Normal file
View file

@ -0,0 +1,281 @@

namespace DutyContent.Tab
{
partial class PingForm
{
/// <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.panel6 = new System.Windows.Forms.Panel();
this.cboPingDefAddr = new System.Windows.Forms.ComboBox();
this.lblPingDefAddr = new System.Windows.Forms.Label();
this.pbxPingGraph = new System.Windows.Forms.PictureBox();
this.chkPingGraph = new System.Windows.Forms.CheckBox();
this.tlpnPingColors = new System.Windows.Forms.TableLayoutPanel();
this.lblPingStat1 = new System.Windows.Forms.Label();
this.btnPingColor4 = new System.Windows.Forms.Button();
this.btnPingColor2 = new System.Windows.Forms.Button();
this.btnPingColor3 = new System.Windows.Forms.Button();
this.lblPingStat2 = new System.Windows.Forms.Label();
this.lblPingStat4 = new System.Windows.Forms.Label();
this.btnPingColor1 = new System.Windows.Forms.Button();
this.lblPingStat3 = new System.Windows.Forms.Label();
this.lblPingColors = new System.Windows.Forms.Label();
this.chkUsePing = new System.Windows.Forms.CheckBox();
this.panel6.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pbxPingGraph)).BeginInit();
this.tlpnPingColors.SuspendLayout();
this.SuspendLayout();
//
// panel6
//
this.panel6.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.panel6.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.panel6.Controls.Add(this.cboPingDefAddr);
this.panel6.Controls.Add(this.lblPingDefAddr);
this.panel6.Controls.Add(this.pbxPingGraph);
this.panel6.Controls.Add(this.chkPingGraph);
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(10, 12);
this.panel6.Name = "panel6";
this.panel6.Size = new System.Drawing.Size(778, 426);
this.panel6.TabIndex = 2;
//
// cboPingDefAddr
//
this.cboPingDefAddr.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cboPingDefAddr.FormattingEnabled = true;
this.cboPingDefAddr.Location = new System.Drawing.Point(535, 51);
this.cboPingDefAddr.Name = "cboPingDefAddr";
this.cboPingDefAddr.Size = new System.Drawing.Size(238, 21);
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.Name = "lblPingDefAddr";
this.lblPingDefAddr.Size = new System.Drawing.Size(25, 13);
this.lblPingDefAddr.TabIndex = 14;
this.lblPingDefAddr.Text = "335";
//
// 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.Name = "pbxPingGraph";
this.pbxPingGraph.Size = new System.Drawing.Size(644, 186);
this.pbxPingGraph.TabIndex = 13;
this.pbxPingGraph.TabStop = false;
//
// chkPingGraph
//
this.chkPingGraph.AutoSize = true;
this.chkPingGraph.Location = new System.Drawing.Point(26, 108);
this.chkPingGraph.Name = "chkPingGraph";
this.chkPingGraph.Size = new System.Drawing.Size(44, 17);
this.chkPingGraph.TabIndex = 12;
this.chkPingGraph.Text = "334";
this.chkPingGraph.UseVisualStyleBackColor = true;
this.chkPingGraph.CheckedChanged += new System.EventHandler(this.ChkPingGraph_CheckedChanged);
//
// tlpnPingColors
//
this.tlpnPingColors.ColumnCount = 4;
this.tlpnPingColors.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
this.tlpnPingColors.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
this.tlpnPingColors.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
this.tlpnPingColors.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
this.tlpnPingColors.Controls.Add(this.lblPingStat1, 0, 0);
this.tlpnPingColors.Controls.Add(this.btnPingColor4, 3, 1);
this.tlpnPingColors.Controls.Add(this.btnPingColor2, 1, 1);
this.tlpnPingColors.Controls.Add(this.btnPingColor3, 2, 1);
this.tlpnPingColors.Controls.Add(this.lblPingStat2, 1, 0);
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.Name = "tlpnPingColors";
this.tlpnPingColors.Padding = new System.Windows.Forms.Padding(3);
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.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.Name = "lblPingStat1";
this.lblPingStat1.Size = new System.Drawing.Size(72, 22);
this.lblPingStat1.TabIndex = 6;
this.lblPingStat1.Text = "330";
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.Name = "btnPingColor4";
this.btnPingColor4.Size = new System.Drawing.Size(72, 28);
this.btnPingColor4.TabIndex = 8;
this.btnPingColor4.UseVisualStyleBackColor = false;
this.btnPingColor4.Click += new System.EventHandler(this.BtnPingColor4_Click);
//
// btnPingColor2
//
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.Name = "btnPingColor2";
this.btnPingColor2.Size = new System.Drawing.Size(72, 28);
this.btnPingColor2.TabIndex = 10;
this.btnPingColor2.UseVisualStyleBackColor = false;
this.btnPingColor2.Click += new System.EventHandler(this.BtnPingColor2_Click);
//
// btnPingColor3
//
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.Name = "btnPingColor3";
this.btnPingColor3.Size = new System.Drawing.Size(72, 28);
this.btnPingColor3.TabIndex = 9;
this.btnPingColor3.UseVisualStyleBackColor = false;
this.btnPingColor3.Click += new System.EventHandler(this.BtnPingColor3_Click);
//
// lblPingStat2
//
this.lblPingStat2.AutoSize = true;
this.lblPingStat2.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblPingStat2.Location = new System.Drawing.Point(84, 3);
this.lblPingStat2.Name = "lblPingStat2";
this.lblPingStat2.Size = new System.Drawing.Size(72, 22);
this.lblPingStat2.TabIndex = 5;
this.lblPingStat2.Text = "331";
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.Name = "lblPingStat4";
this.lblPingStat4.Size = new System.Drawing.Size(72, 22);
this.lblPingStat4.TabIndex = 3;
this.lblPingStat4.Text = "333";
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.Name = "btnPingColor1";
this.btnPingColor1.Size = new System.Drawing.Size(72, 28);
this.btnPingColor1.TabIndex = 7;
this.btnPingColor1.UseVisualStyleBackColor = false;
this.btnPingColor1.Click += new System.EventHandler(this.BtnPingColor1_Click);
//
// lblPingStat3
//
this.lblPingStat3.AutoSize = true;
this.lblPingStat3.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblPingStat3.Location = new System.Drawing.Point(162, 3);
this.lblPingStat3.Name = "lblPingStat3";
this.lblPingStat3.Size = new System.Drawing.Size(72, 22);
this.lblPingStat3.TabIndex = 4;
this.lblPingStat3.Text = "332";
this.lblPingStat3.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// lblPingColors
//
this.lblPingColors.AutoSize = true;
this.lblPingColors.Location = new System.Drawing.Point(23, 35);
this.lblPingColors.Name = "lblPingColors";
this.lblPingColors.Size = new System.Drawing.Size(25, 13);
this.lblPingColors.TabIndex = 2;
this.lblPingColors.Text = "329";
//
// 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.Name = "chkUsePing";
this.chkUsePing.Size = new System.Drawing.Size(58, 24);
this.chkUsePing.TabIndex = 0;
this.chkUsePing.Text = "328";
this.chkUsePing.UseVisualStyleBackColor = true;
this.chkUsePing.CheckedChanged += new System.EventHandler(this.ChkUsePing_CheckedChanged);
//
// PingForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 450);
this.Controls.Add(this.panel6);
this.Name = "PingForm";
this.Text = "Ping";
this.panel6.ResumeLayout(false);
this.panel6.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.pbxPingGraph)).EndInit();
this.tlpnPingColors.ResumeLayout(false);
this.tlpnPingColors.PerformLayout();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Panel panel6;
private System.Windows.Forms.ComboBox cboPingDefAddr;
private System.Windows.Forms.Label lblPingDefAddr;
private System.Windows.Forms.PictureBox pbxPingGraph;
private System.Windows.Forms.CheckBox chkPingGraph;
private System.Windows.Forms.TableLayoutPanel tlpnPingColors;
private System.Windows.Forms.Label lblPingStat1;
private System.Windows.Forms.Button btnPingColor4;
private System.Windows.Forms.Button btnPingColor2;
private System.Windows.Forms.Button btnPingColor3;
private System.Windows.Forms.Label lblPingStat2;
private System.Windows.Forms.Label lblPingStat4;
private System.Windows.Forms.Button btnPingColor1;
private System.Windows.Forms.Label lblPingStat3;
private System.Windows.Forms.Label lblPingColors;
private System.Windows.Forms.CheckBox chkUsePing;
}
}

324
Tab/PingForm.cs Normal file
View file

@ -0,0 +1,324 @@
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
{
public partial class PingForm : Form, Interface.ISuppLocale, Interface.ISuppActPlugin
{
private static PingForm _self;
public static PingForm Self => _self;
//
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 };
public PingForm()
{
_self = this;
InitializeComponent();
_grpr = new Libre.PingGrapher(pbxPingGraph);
}
public void PluginInitialize()
{
chkUsePing.Checked = DcConfig.Duty.UsePing;
btnPingColor1.BackColor = DcConfig.Duty.PingColors[0];
btnPingColor2.BackColor = DcConfig.Duty.PingColors[1];
btnPingColor3.BackColor = DcConfig.Duty.PingColors[2];
btnPingColor4.BackColor = DcConfig.Duty.PingColors[3];
chkPingGraph.Checked = DcConfig.Duty.PingGraph;
//
try
{
var svl = File.ReadAllLines(Path.Combine(DcConfig.DataPath, "ServerList.txt"));
int ssv = -1;
for (var i = 0; i < svl.Length; i++)
{
cboPingDefAddr.Items.Add(svl[i]);
if (svl[i].StartsWith(DcConfig.Duty.PingDefAddr))
ssv = i;
}
if (string.IsNullOrEmpty(DcConfig.Duty.PingDefAddr))
ssv = -1;
cboPingDefAddr.SelectedIndex = ssv > 0 ? ssv : 0;
}
catch
{
cboPingDefAddr.Items.Clear();
cboPingDefAddr.Items.Add(MesgLog.Text(27));
cboPingDefAddr.SelectedIndex = 0;
}
//
_timer = new System.Timers.Timer() { Interval = 5000 };
_timer.Elapsed += (sender, e) => PingOnce();
if (DcConfig.Duty.UsePing)
{
PingOnce(false);
_timer.Start();
}
}
public void PluginDeinitialize()
{
_timer?.Stop();
}
public void RefreshLocale()
{
}
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);
}
private void SaveConfig(int interval = 5000)
{
DcControl.Self.RefreshSaveConfig(interval);
}
private void ChkUsePing_CheckedChanged(object sender, EventArgs e)
{
if (!DcConfig.PluginEnable)
return;
DcConfig.Duty.UsePing = chkUsePing.Checked;
SaveConfig();
if (chkUsePing.Checked)
{
PingOnce();
_timer.Start();
}
else
{
_timer.Stop();
Overlay.DutyOvForm.Self?.ResetStat();
}
}
private void PingColorWorker(int index, Button button)
{
Color color = (Color)WorkerAct.Invoker(new WorkerAct.ObjectReturnerDelegate(() =>
{
var dg = new ColorDialog()
{
AnyColor = true,
Color = DcConfig.Duty.PingColors[index],
};
return dg.ShowDialog() == DialogResult.OK ? dg.Color : DcConfig.Duty.PingColors[index];
}));
if (DcConfig.Duty.PingColors[index] != color)
{
button.BackColor = color;
DcConfig.Duty.PingColors[index] = color;
SaveConfig();
}
}
private void BtnPingColor1_Click(object sender, EventArgs e)
{
PingColorWorker(0, btnPingColor1);
}
private void BtnPingColor2_Click(object sender, EventArgs e)
{
PingColorWorker(1, btnPingColor2);
}
private void BtnPingColor3_Click(object sender, EventArgs e)
{
PingColorWorker(2, btnPingColor3);
}
private void BtnPingColor4_Click(object sender, EventArgs e)
{
PingColorWorker(3, btnPingColor4);
}
private void ChkPingGraph_CheckedChanged(object sender, EventArgs e)
{
if (!DcConfig.PluginEnable)
return;
DcConfig.Duty.PingGraph = chkPingGraph.Checked;
SaveConfig();
}
private void CboPingDefAddr_SelectedIndexChanged(object sender, EventArgs e)
{
if (!DcConfig.PluginEnable)
return;
var val = cboPingDefAddr.SelectedItem as string;
if (!string.IsNullOrEmpty(val))
{
var ss = val.Split(' ');
if (ss.Length > 0)
{
DcConfig.Duty.PingDefAddr = ss[0].Trim();
SaveConfig();
return;
}
}
DcConfig.Duty.PingDefAddr = string.Empty;
SaveConfig();
}
//
private void PingOnce(bool check_plugin_enable = true)
{
if (!DcConfig.Duty.UsePing)
return;
if (check_plugin_enable && !DcConfig.PluginEnable)
return;
var conns = DcConfig.Connections.CopyConnection();
long rtt = 0;
double loss = 0;
if (conns.Length > 0)
{
foreach (var row in conns)
{
var (r, l) = CalcPing(row.RemoteAddress);
if (rtt < r)
rtt = r;
if (loss < l)
loss = l;
}
}
else
{
if (string.IsNullOrEmpty(DcConfig.Duty.PingDefAddr))
{
Overlay.DutyOvForm.Self?.ResetStat();
return;
}
var defip = ThirdParty.Converter.ToIPAddressFromIPV4(DcConfig.Duty.PingDefAddr);
if (defip == IPAddress.None || defip == IPAddress.IPv6None)
{
Overlay.DutyOvForm.Self?.ResetStat();
return;
}
var (r, l) = CalcPing(defip);
if (rtt < r)
rtt = r;
if (loss < l)
loss = l;
}
//MesgLog.L("Ping: {0}, {1}%", rtt, loss);
Color color;
if (loss > 0.0 || rtt > 150)
color = DcConfig.Duty.PingColors[3];
else if (rtt > 100)
color = DcConfig.Duty.PingColors[2];
else if (rtt > 50)
color = DcConfig.Duty.PingColors[1];
else
color = DcConfig.Duty.PingColors[0];
if (_last_ping != rtt || loss > 0.0 || _color != color)
{
_last_ping = rtt;
_color = color;
Overlay.DutyOvForm.Self?.SetStatPing(color, rtt, loss);
}
//
if (DcConfig.Duty.PingGraph)
{
_kepts.Add((int)rtt);
if (_kepts.Count > 120)
_kepts.RemoveAt(0);
_grpr.Enter();
_grpr.DrawValues(_kepts);
WorkerAct.Invoker(() => _grpr.Leave());
}
}
// http://forum.codecall.net/topic/37643-c-packet-lossping-program/
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)
{
var ps = new Ping();
int failed = 0;
long rtt = 0;
for (var i = 0; i < amount; i++)
{
PingReply pr = ps.Send(host, _ping_timerout, _ping_buffers, _ping_options);
if (pr.Status != IPStatus.Success)
failed++;
if (rtt < pr.RoundtripTime)
rtt = pr.RoundtripTime;
}
double loss = (failed / amount) * 100;
return (rtt, loss);
}
}
}

120
Tab/PingForm.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>