initial
This commit is contained in:
38
LiamTestTeams/App.config
Normal file
38
LiamTestTeams/App.config
Normal file
@@ -0,0 +1,38 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2" />
|
||||
</startup>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.1" newVersion="4.0.1.1" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="7.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.ValueTuple" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Diagnostics.DiagnosticSource" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-5.0.0.1" newVersion="5.0.0.1" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.Graph.Core" publicKeyToken="31bf3856ad364e35" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-1.24.0.0" newVersion="1.24.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.Identity.Client" publicKeyToken="0a613f4dd989e8ae" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.27.0.0" newVersion="4.27.0.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
</configuration>
|
||||
BIN
LiamTestTeams/C4IT.ico
Normal file
BIN
LiamTestTeams/C4IT.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 470 KiB |
BIN
LiamTestTeams/Images/ChannelFolder_32.png
Normal file
BIN
LiamTestTeams/Images/ChannelFolder_32.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.5 KiB |
BIN
LiamTestTeams/Images/Channel_32.png
Normal file
BIN
LiamTestTeams/Images/Channel_32.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 750 B |
BIN
LiamTestTeams/Images/Folder_32.png
Normal file
BIN
LiamTestTeams/Images/Folder_32.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 861 B |
BIN
LiamTestTeams/Images/Team_32.png
Normal file
BIN
LiamTestTeams/Images/Team_32.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 626 B |
155
LiamTestTeams/LiamTestTeams.csproj
Normal file
155
LiamTestTeams/LiamTestTeams.csproj
Normal file
@@ -0,0 +1,155 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{6197C490-07C6-4313-8E0F-AADC27776473}</ProjectGuid>
|
||||
<OutputType>WinExe</OutputType>
|
||||
<RootNamespace>LiamTestTeams</RootNamespace>
|
||||
<AssemblyName>LiamTestTeams</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.6.2</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||
<Deterministic>False</Deterministic>
|
||||
<SccProjectName>SAK</SccProjectName>
|
||||
<SccLocalPath>SAK</SccLocalPath>
|
||||
<SccAuxPath>SAK</SccAuxPath>
|
||||
<SccProvider>SAK</SccProvider>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<Prefer32Bit>false</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<Prefer32Bit>false</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<ApplicationIcon>C4IT.ico</ApplicationIcon>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\_shared\Newtonsoft.Json.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.IdentityModel" />
|
||||
<Reference Include="System.Numerics" />
|
||||
<Reference Include="System.Web" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Deployment" />
|
||||
<Reference Include="System.Drawing" />
|
||||
<Reference Include="System.Net.Http" />
|
||||
<Reference Include="System.Windows.Forms" />
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="..\..\Common Code\Configuration\C4IT.Configuration.ConfigHelper.cs">
|
||||
<Link>Common\C4IT.Configuration.ConfigHelper.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="..\..\Common Code\Security\C4IT.Security.SecurePassword.cs">
|
||||
<Link>Common\C4IT.Security.SecurePassword.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="..\SharedAssemblyInfo.cs">
|
||||
<Link>Properties\SharedAssemblyInfo.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="cLiamTestTeamsConfig.cs" />
|
||||
<Compile Include="ctrlTabLiam.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
<Compile Include="ctrlTabLiam.Designer.cs">
|
||||
<DependentUpon>ctrlTabLiam.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="frmMain.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="frmMain.Designer.cs">
|
||||
<DependentUpon>frmMain.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="frmPermissionInput.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="frmPermissionInput.Designer.cs">
|
||||
<DependentUpon>frmPermissionInput.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="NodesBase.cs" />
|
||||
<Compile Include="NodesLiam.cs" />
|
||||
<Compile Include="NodesMsTeams.cs" />
|
||||
<Compile Include="Program.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<EmbeddedResource Include="ctrlTabLiam.resx">
|
||||
<DependentUpon>ctrlTabLiam.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="frmMain.resx">
|
||||
<DependentUpon>frmMain.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="frmPermissionInput.resx">
|
||||
<DependentUpon>frmPermissionInput.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Properties\Resources.resx">
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<Compile Include="Properties\Resources.Designer.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DependentUpon>Resources.resx</DependentUpon>
|
||||
</Compile>
|
||||
<None Include="Properties\Settings.settings">
|
||||
<Generator>SettingsSingleFileGenerator</Generator>
|
||||
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
||||
</None>
|
||||
<Compile Include="Properties\Settings.Designer.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DependentUpon>Settings.settings</DependentUpon>
|
||||
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="App.config" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="C4IT.ico" />
|
||||
<Content Include="Images\ChannelFolder_32.png" />
|
||||
<Content Include="Images\Channel_32.png" />
|
||||
<Content Include="Images\Folder_32.png" />
|
||||
<Content Include="Images\Team_32.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\LiamBaseClasses\LiamBaseClasses.csproj">
|
||||
<Project>{3531c9e6-cf6e-458e-b604-4a5a8d1c7ab0}</Project>
|
||||
<Name>LiamBaseClasses</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\LiamHelper\LiamHelper.csproj">
|
||||
<Project>{6b0e73a6-f918-42d5-9525-d59d4d16283d}</Project>
|
||||
<Name>LiamHelper</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\LiamMsGraph\LiamMsGraph.csproj">
|
||||
<Project>{452827db-14ff-469e-af41-1a24e1875bda}</Project>
|
||||
<Name>LiamMsGraph</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\LiamMsTeams\LiamMsTeams.csproj">
|
||||
<Project>{dacbd3dc-1866-4b39-964a-d2a8dea2774c}</Project>
|
||||
<Name>LiamMsTeams</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
</Project>
|
||||
10
LiamTestTeams/LiamTestTeams.csproj.vspscc
Normal file
10
LiamTestTeams/LiamTestTeams.csproj.vspscc
Normal file
@@ -0,0 +1,10 @@
|
||||
""
|
||||
{
|
||||
"FILE_VERSION" = "9237"
|
||||
"ENLISTMENT_CHOICE" = "NEVER"
|
||||
"PROJECT_FILE_RELATIVE_PATH" = ""
|
||||
"NUMBER_OF_EXCLUDED_FILES" = "0"
|
||||
"ORIGINAL_PROJECT_FILE_PATH" = ""
|
||||
"NUMBER_OF_NESTED_PROJECTS" = "0"
|
||||
"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER"
|
||||
}
|
||||
124
LiamTestTeams/NodesBase.cs
Normal file
124
LiamTestTeams/NodesBase.cs
Normal file
@@ -0,0 +1,124 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
using Newtonsoft.Json;
|
||||
using C4IT.LIAM;
|
||||
|
||||
namespace LiamTestTeams
|
||||
{
|
||||
public class TreeNodeBase
|
||||
{
|
||||
public const int iconIndexUnknown = 8;
|
||||
|
||||
public TreeNodeBase Parent = null;
|
||||
|
||||
public virtual bool AutoResolved()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
virtual public string GetInfoText()
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
virtual public string GetUID()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
virtual public async Task<List<TreeNodeBase>> ResolveAsync(bool ResolveAlways = false)
|
||||
{
|
||||
await Task.Delay(0);
|
||||
return null;
|
||||
}
|
||||
|
||||
virtual public bool IsResolved()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public virtual int ImageIndex()
|
||||
{
|
||||
return iconIndexUnknown;
|
||||
}
|
||||
|
||||
public string GetJson()
|
||||
{
|
||||
var set = new JsonSerializerSettings()
|
||||
{
|
||||
Formatting = Formatting.Indented
|
||||
};
|
||||
|
||||
var RetVal = JsonConvert.SerializeObject(GetJsonObject(), set);
|
||||
|
||||
return RetVal;
|
||||
}
|
||||
|
||||
public virtual dynamic GetJsonObject()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
public virtual bool SupportPermissionAdd()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
public virtual bool SupportPermissionRemoveDirect()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
public virtual bool SupportPermissionRemoveByValue()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
public virtual async Task<bool> AddPermission(eLiamAccessRoles Role, string Identity)
|
||||
{
|
||||
await Task.Delay(0);
|
||||
throw new InvalidOperationException($"Add permission not supported for '{this.GetType()}'");
|
||||
}
|
||||
|
||||
public virtual async Task<bool> RemovePermissionByValue(eLiamAccessRoles Role, string Identity)
|
||||
{
|
||||
await Task.Delay(0);
|
||||
throw new InvalidOperationException($"Add permission not supported for '{this.GetType()}'");
|
||||
}
|
||||
|
||||
public virtual async Task<bool> RemovePermissionDirect()
|
||||
{
|
||||
await Task.Delay(0);
|
||||
throw new InvalidOperationException($"Remove permission not supported for '{this.GetType()}'");
|
||||
}
|
||||
|
||||
public virtual List<eLiamAccessRoles> ValidPermissionRoles()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
public virtual string getLastError() { return null; }
|
||||
|
||||
public virtual async Task<TreeNodeBase> LoadFromUID()
|
||||
{
|
||||
await Task.Delay(0);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public abstract class TreeNodeRoot : TreeNodeBase
|
||||
{
|
||||
public cLiamProviderData Provider;
|
||||
|
||||
public TreeNodeRoot(cLiamProviderData Provider)
|
||||
{
|
||||
this.Provider = Provider;
|
||||
}
|
||||
|
||||
public abstract Task<bool> LogonAsync();
|
||||
}
|
||||
}
|
||||
484
LiamTestTeams/NodesLiam.cs
Normal file
484
LiamTestTeams/NodesLiam.cs
Normal file
@@ -0,0 +1,484 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
using C4IT.LIAM;
|
||||
using C4IT.Logging;
|
||||
using static C4IT.Logging.cLogManager;
|
||||
|
||||
namespace LiamTestTeams
|
||||
{
|
||||
public class TreeNodeLiamRoot : TreeNodeRoot
|
||||
{
|
||||
public cLiamProviderBase ProviderBase;
|
||||
|
||||
public TreeNodeLiamRoot(cLiamProviderData Provider) : base(Provider)
|
||||
{
|
||||
}
|
||||
|
||||
public bool Load()
|
||||
{
|
||||
var CM = MethodBase.GetCurrentMethod();
|
||||
LogMethodBegin(CM);
|
||||
try
|
||||
{
|
||||
var LiamCfg = new cLiamConfiguration();
|
||||
ProviderBase = cLiamProviderBase.CreateInstance(LiamCfg, Provider);
|
||||
|
||||
return ProviderBase != null;
|
||||
}
|
||||
catch (Exception E)
|
||||
{
|
||||
LogException(E);
|
||||
return false;
|
||||
}
|
||||
finally
|
||||
{
|
||||
LogMethodEnd(CM);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
public override async Task<bool> LogonAsync()
|
||||
{
|
||||
var CM = MethodBase.GetCurrentMethod();
|
||||
LogMethodBegin(CM);
|
||||
try
|
||||
{
|
||||
if (ProviderBase == null)
|
||||
if (!Load())
|
||||
return false;
|
||||
|
||||
var RetVal = await ProviderBase.LogonAsync();
|
||||
|
||||
return RetVal;
|
||||
}
|
||||
catch (Exception E)
|
||||
{
|
||||
LogException(E);
|
||||
return false;
|
||||
}
|
||||
finally
|
||||
{
|
||||
LogMethodEnd(CM);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
public override async Task<List<TreeNodeBase>> ResolveAsync(bool ResolveAlways = false)
|
||||
{
|
||||
var CM = MethodBase.GetCurrentMethod();
|
||||
LogMethodBegin(CM);
|
||||
try
|
||||
{
|
||||
var lstLiamNodes = await ProviderBase.getDataAreasAsync(0);
|
||||
if (lstLiamNodes == null)
|
||||
return null;
|
||||
|
||||
var RetVal = new List<TreeNodeBase>();
|
||||
foreach (var Entry in lstLiamNodes)
|
||||
{
|
||||
var Node = new TreeNodeLiamNode(Entry);
|
||||
RetVal.Add(Node);
|
||||
}
|
||||
|
||||
return RetVal;
|
||||
}
|
||||
catch (Exception E)
|
||||
{
|
||||
LogException(E);
|
||||
return null;
|
||||
}
|
||||
finally
|
||||
{
|
||||
LogMethodEnd(CM);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class TreeNodeLiamNode : TreeNodeBase
|
||||
{
|
||||
public cLiamDataAreaBase DataArea;
|
||||
|
||||
private bool privIsResolved = false;
|
||||
|
||||
private List<cLiamUserInfo> Owners = null;
|
||||
|
||||
public TreeNodeLiamNode(cLiamDataAreaBase DataArea)
|
||||
{
|
||||
this.DataArea = DataArea;
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return DataArea?.TechnicalName ?? "";
|
||||
}
|
||||
|
||||
public override int ImageIndex()
|
||||
{
|
||||
if (DataArea == null)
|
||||
return iconIndexUnknown;
|
||||
|
||||
switch (DataArea.DataType)
|
||||
{
|
||||
case eLiamDataAreaTypes.MsTeamsTeam:
|
||||
return 0;
|
||||
case eLiamDataAreaTypes.MsTeamsChannel:
|
||||
return 1;
|
||||
case eLiamDataAreaTypes.MsTeamsFolder:
|
||||
return 3;
|
||||
default:
|
||||
return iconIndexUnknown;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public override bool IsResolved()
|
||||
{
|
||||
return privIsResolved;
|
||||
}
|
||||
|
||||
public override async Task<List<TreeNodeBase>> ResolveAsync(bool ResolveAlways = false)
|
||||
{
|
||||
if (DataArea == null)
|
||||
return null;
|
||||
|
||||
Owners = await DataArea.GetOwnersAsync();
|
||||
|
||||
var Children = await DataArea.getChildrenAsync(0);
|
||||
if (Children == null)
|
||||
return null;
|
||||
|
||||
var RetVal = new List<TreeNodeBase>();
|
||||
if (DataArea.SupportsPermissions)
|
||||
RetVal.Add(new TreeNodeLiamPermissionList(DataArea));
|
||||
foreach (var Entry in Children)
|
||||
{
|
||||
var Node = new TreeNodeLiamNode(Entry);
|
||||
RetVal.Add(Node);
|
||||
}
|
||||
|
||||
privIsResolved = true;
|
||||
|
||||
return RetVal;
|
||||
}
|
||||
|
||||
public override string GetInfoText()
|
||||
{
|
||||
var RetVal = $"Technical name: {DataArea?.TechnicalName}";
|
||||
RetVal += $"\r\n\r\nData type: {DataArea?.DataType}";
|
||||
RetVal += $"\r\nUID: {DataArea?.UID}";
|
||||
RetVal += $"\r\nParent UID: {DataArea?.ParentUID}";
|
||||
RetVal += $"\r\n\r\nLevel: {DataArea?.Level}";
|
||||
RetVal += $"\r\nSupport permissions: {DataArea?.SupportsPermissions}";
|
||||
|
||||
if (Owners != null)
|
||||
{
|
||||
if (Owners.Count == 0)
|
||||
{
|
||||
RetVal += $"\r\n\r\nOwner list is empty (no members)";
|
||||
}
|
||||
else
|
||||
{
|
||||
RetVal += $"\r\n\r\nOwners:";
|
||||
foreach (var Owner in Owners)
|
||||
{
|
||||
RetVal += $"\r\n {Owner.DisplayName}: UPN='{Owner.UserPrincipalName}', SID='{Owner.SID}'";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return RetVal;
|
||||
}
|
||||
|
||||
public override string GetUID()
|
||||
{
|
||||
return DataArea.UID;
|
||||
}
|
||||
|
||||
public override async Task<TreeNodeBase> LoadFromUID()
|
||||
{
|
||||
var CM = MethodBase.GetCurrentMethod();
|
||||
LogMethodBegin(CM);
|
||||
try
|
||||
{
|
||||
var UID = GetUID();
|
||||
if (string.IsNullOrEmpty(UID))
|
||||
return null;
|
||||
|
||||
var R = await DataArea.Provider.LoadDataArea(UID);
|
||||
if (R == null)
|
||||
return null;
|
||||
|
||||
var RetVal = new TreeNodeLiamNode(R);
|
||||
|
||||
return RetVal;
|
||||
}
|
||||
catch (Exception E)
|
||||
{
|
||||
LogException(E);
|
||||
return null;
|
||||
}
|
||||
finally
|
||||
{
|
||||
LogMethodEnd(CM);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public class TreeNodeLiamPermissionList : TreeNodeBase
|
||||
{
|
||||
public cLiamDataAreaBase DataArea;
|
||||
|
||||
private bool privIsResolved = false;
|
||||
|
||||
public TreeNodeLiamPermissionList(cLiamDataAreaBase DataArea)
|
||||
{
|
||||
this.DataArea = DataArea;
|
||||
}
|
||||
|
||||
public override string GetInfoText()
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return "Permissions";
|
||||
}
|
||||
|
||||
public override bool IsResolved()
|
||||
{
|
||||
return privIsResolved;
|
||||
}
|
||||
|
||||
override public async Task<List<TreeNodeBase>> ResolveAsync(bool ResolveAlways = false)
|
||||
{
|
||||
try
|
||||
{
|
||||
var RetVal = new List<TreeNodeBase>();
|
||||
var Perms = await DataArea.GetPermissionsAsync(ResolveAlways);
|
||||
if (Perms == null)
|
||||
return null;
|
||||
|
||||
foreach (var Entry in Perms)
|
||||
{
|
||||
RetVal.Add(new TreeNodeLiamPermission(Entry, DataArea));
|
||||
}
|
||||
|
||||
privIsResolved = true;
|
||||
return RetVal;
|
||||
}
|
||||
catch (Exception E)
|
||||
{
|
||||
LogException(E);
|
||||
}
|
||||
finally
|
||||
{
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public override int ImageIndex()
|
||||
{
|
||||
return 4;
|
||||
}
|
||||
|
||||
public override dynamic GetJsonObject()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
public override bool SupportPermissionAdd()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public override bool SupportPermissionRemoveByValue()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
public override async Task<bool> AddPermission(eLiamAccessRoles Role, string Identity)
|
||||
{
|
||||
try
|
||||
{
|
||||
var UserInfo = new cLiamUserInfo()
|
||||
{
|
||||
UserPrincipalName = Identity,
|
||||
EMail = Identity
|
||||
};
|
||||
var PermResult = await DataArea.GrantPermissionAsync(UserInfo, Role);
|
||||
if (PermResult.Valid)
|
||||
return true;
|
||||
}
|
||||
catch (Exception E)
|
||||
{
|
||||
cLogManager.LogException(E);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public override async Task<bool> RemovePermissionByValue(eLiamAccessRoles Role, string Identity)
|
||||
{
|
||||
try
|
||||
{
|
||||
await Task.Delay(0);
|
||||
}
|
||||
catch (Exception E)
|
||||
{
|
||||
cLogManager.LogException(E);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public override List<eLiamAccessRoles> ValidPermissionRoles()
|
||||
{
|
||||
var RetVal = new List<eLiamAccessRoles>() {
|
||||
eLiamAccessRoles.Read,
|
||||
eLiamAccessRoles.Write,
|
||||
eLiamAccessRoles.Owner
|
||||
};
|
||||
return RetVal;
|
||||
}
|
||||
|
||||
public override string getLastError()
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
public class TreeNodeLiamPermission : TreeNodeBase
|
||||
{
|
||||
public cLiamPermissionInfo Permission = null;
|
||||
public cLiamDataAreaBase DataArea = null;
|
||||
|
||||
public TreeNodeLiamPermission(cLiamPermissionInfo Permission, cLiamDataAreaBase DataArea) : base()
|
||||
{
|
||||
this.Permission = Permission;
|
||||
this.DataArea = DataArea;
|
||||
}
|
||||
|
||||
public override bool AutoResolved()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public override string GetInfoText()
|
||||
{
|
||||
if (Permission == null)
|
||||
return "";
|
||||
|
||||
var strInfo = $"Type: Role memership";
|
||||
|
||||
|
||||
var strUser = "-unknown-";
|
||||
if (Permission.User != null)
|
||||
{
|
||||
if (Permission.User != null)
|
||||
{
|
||||
strUser = Permission.User.DisplayName;
|
||||
if (string.IsNullOrEmpty(strUser))
|
||||
strUser = Permission.User.UserPrincipalName;
|
||||
if (string.IsNullOrEmpty(strUser))
|
||||
strUser = Permission.User.EMail;
|
||||
}
|
||||
}
|
||||
strInfo += $"\r\n\r\nUser or group: {strUser}";
|
||||
|
||||
|
||||
strInfo += $"\r\n\r\nRole: {Permission.AccessRole}";
|
||||
|
||||
return strInfo;
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
try
|
||||
{
|
||||
if (Permission == null)
|
||||
return "";
|
||||
|
||||
var strName = "Unknown";
|
||||
if (Permission.User != null)
|
||||
{
|
||||
strName = Permission.User.DisplayName;
|
||||
if (string.IsNullOrEmpty(strName))
|
||||
strName = Permission.User.UserPrincipalName;
|
||||
if (string.IsNullOrEmpty(strName))
|
||||
strName = Permission.User.EMail;
|
||||
}
|
||||
strName += ": [" ;
|
||||
|
||||
var strRoles = Permission.AccessRole.ToString();
|
||||
|
||||
return strName + strRoles + "]";
|
||||
}
|
||||
catch (Exception E)
|
||||
{
|
||||
cLogManager.LogException(E);
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
public override bool IsResolved()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
override public async Task<List<TreeNodeBase>> ResolveAsync(bool ResolveAlways = false)
|
||||
{
|
||||
await Task.Delay(0);
|
||||
return new List<TreeNodeBase>();
|
||||
}
|
||||
|
||||
public override int ImageIndex()
|
||||
{
|
||||
return 6;
|
||||
}
|
||||
|
||||
public override dynamic GetJsonObject()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
public override bool SupportPermissionRemoveDirect()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public override async Task<bool> RemovePermissionDirect()
|
||||
{
|
||||
try
|
||||
{
|
||||
if (Permission == null)
|
||||
return false;
|
||||
if (Permission.User == null)
|
||||
return false;
|
||||
|
||||
|
||||
var RetVal = await DataArea.RevokePermissionAsync(Permission.User, Permission.AccessRole);
|
||||
return RetVal;
|
||||
}
|
||||
catch (Exception E)
|
||||
{
|
||||
cLogManager.LogException(E);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
719
LiamTestTeams/NodesMsTeams.cs
Normal file
719
LiamTestTeams/NodesMsTeams.cs
Normal file
@@ -0,0 +1,719 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
using C4IT.Logging;
|
||||
using C4IT.MsGraph;
|
||||
using C4IT.LIAM;
|
||||
using System.Reflection;
|
||||
using static C4IT.Logging.cLogManager;
|
||||
|
||||
namespace LiamTestTeams
|
||||
{
|
||||
public class TreeNodeMsTeamsRoot : TreeNodeRoot
|
||||
{
|
||||
public cMsGraphSharepoint MsSharepoint;
|
||||
|
||||
public TreeNodeMsTeamsRoot(cLiamProviderData Provider) : base(Provider)
|
||||
{
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
var s = MsSharepoint?.Base?.Me?.DisplayName;
|
||||
return s ?? "";
|
||||
}
|
||||
|
||||
public override string GetInfoText()
|
||||
{
|
||||
var s = MsSharepoint?.Base?.Me?.PublisherDomain;
|
||||
return s ?? "";
|
||||
}
|
||||
|
||||
public override async Task<bool> LogonAsync()
|
||||
{
|
||||
var CM = MethodBase.GetCurrentMethod();
|
||||
LogMethodBegin(CM);
|
||||
try
|
||||
{
|
||||
var MsGraph = new cMsGraphBase();
|
||||
|
||||
var LogonInfo = new cMsGraphLogonInfo()
|
||||
{
|
||||
Tenant = Provider.Domain,
|
||||
ClientID = Provider.Credential.Identification,
|
||||
ClientSecret = Provider.Credential.Secret
|
||||
};
|
||||
|
||||
var isOk = await MsGraph.LogonAsync(LogonInfo);
|
||||
if (!isOk)
|
||||
return false;
|
||||
|
||||
MsSharepoint = new cMsGraphSharepoint(MsGraph);
|
||||
|
||||
return true;
|
||||
}
|
||||
catch (Exception E)
|
||||
{
|
||||
LogException(E);
|
||||
return false;
|
||||
}
|
||||
finally
|
||||
{
|
||||
LogMethodEnd(CM);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public override async Task<List<TreeNodeBase>> ResolveAsync(bool ResolveAlways = false)
|
||||
{
|
||||
var CM = MethodBase.GetCurrentMethod();
|
||||
LogMethodBegin(CM);
|
||||
var RetVal = new List<TreeNodeBase>();
|
||||
try
|
||||
{
|
||||
var lstTeams = await MsSharepoint.RequestTeamsListAsync();
|
||||
if (lstTeams == null || lstTeams.Count == 0)
|
||||
return RetVal;
|
||||
|
||||
foreach (var Entry in lstTeams.Values)
|
||||
{
|
||||
var Team = await MsSharepoint.RequestGroupInfoAsync(Entry);
|
||||
if (Team == null)
|
||||
continue;
|
||||
|
||||
var Node = new TreeNodeMsTeamsGroup(this, Team);
|
||||
RetVal.Add(Node);
|
||||
}
|
||||
}
|
||||
catch (Exception E)
|
||||
{
|
||||
LogException(E);
|
||||
}
|
||||
finally
|
||||
{
|
||||
LogMethodEnd(CM);
|
||||
}
|
||||
|
||||
return RetVal;
|
||||
}
|
||||
|
||||
public override string getLastError()
|
||||
{
|
||||
return MsSharepoint?.Base?.LastErrorMessage ?? "";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public class TreeNodeMsTeamsGroup : TreeNodeBase
|
||||
{
|
||||
public string ID;
|
||||
public cMsGraphResultGroup Group = null;
|
||||
public TreeNodeMsTeamsRoot Root;
|
||||
|
||||
public TreeNodeMsTeamsGroup(TreeNodeMsTeamsRoot Root, cMsGraphResultGroup MsGroup)
|
||||
{
|
||||
this.Root = Root;
|
||||
this.ID = MsGroup.ID;
|
||||
Group = MsGroup;
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
if (Group == null)
|
||||
return "";
|
||||
return Group.DisplayName;
|
||||
}
|
||||
|
||||
public override bool IsResolved()
|
||||
{
|
||||
if (Group == null)
|
||||
return false;
|
||||
if (Group.Channels == null)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
public override string GetInfoText()
|
||||
{
|
||||
if (Group == null)
|
||||
return "";
|
||||
|
||||
var strInfo = "Type: Group";
|
||||
strInfo += $"\r\n\r\nDisplay name: {Group.DisplayName}";
|
||||
strInfo += $"\r\nDescription: {Group.Description}";
|
||||
strInfo += $"\r\nVisibility: {Group.Visibility}";
|
||||
strInfo += $"\r\n\r\nID: {Group.ID}";
|
||||
strInfo += $"\r\nSID: {Group.SID}";
|
||||
strInfo += $"\r\nMail enabled: {Group.MailEnabled}";
|
||||
strInfo += $"\r\nMail address: {Group.MailAddress}";
|
||||
|
||||
if (Group.Drive != null)
|
||||
{
|
||||
strInfo += $"\r\n\r\nDrive name: {Group.Drive.DisplayName}";
|
||||
strInfo += $"\r\nDrive type: {Group.Drive.DriveType}";
|
||||
strInfo += $"\r\nDrive ID: {Group.Drive.ID}";
|
||||
|
||||
if (Group.Drive.Root != null)
|
||||
{
|
||||
strInfo += $"\r\n\r\nRoot name: {Group.Drive.Root.DisplayName}";
|
||||
strInfo += $"\r\nRoot ID: {Group.Drive.Root.ID}";
|
||||
}
|
||||
}
|
||||
|
||||
return strInfo;
|
||||
}
|
||||
|
||||
override public async Task<List<TreeNodeBase>> ResolveAsync(bool ResolveAlways = false)
|
||||
{
|
||||
if (Group == null || ResolveAlways)
|
||||
Group = await Root.MsSharepoint.RequestGroupInfoAsync(ID);
|
||||
if (Group == null)
|
||||
return null;
|
||||
|
||||
if (Group.Drive == null)
|
||||
if (!await Group.ResolveDrive(Root.MsSharepoint))
|
||||
return null;
|
||||
|
||||
if (Group.Drive.Root == null)
|
||||
if (!await Group.Drive.ResolveRoot(Root.MsSharepoint))
|
||||
return null;
|
||||
|
||||
if (Group.Channels == null)
|
||||
if (!await Group.ResolveChannels(Root.MsSharepoint))
|
||||
return null;
|
||||
|
||||
if (Group.Drive.Root.Folders == null)
|
||||
await Group.Drive.Root.ResolveFolders(Root.MsSharepoint);
|
||||
|
||||
var RetVal = new List<TreeNodeBase>(Group.Channels.Count);
|
||||
foreach (var Entry in Group.Channels.Values)
|
||||
{
|
||||
var Item = new TreeNodeMsTeamsChannel(this, Entry);
|
||||
RetVal.Add(Item);
|
||||
}
|
||||
|
||||
return RetVal;
|
||||
}
|
||||
|
||||
public override int ImageIndex()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
public override dynamic GetJsonObject()
|
||||
{
|
||||
return Group.Result; ;
|
||||
}
|
||||
|
||||
public override string getLastError()
|
||||
{
|
||||
return Root?.MsSharepoint?.Base?.LastErrorMessage ?? "";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public class TreeNodeMsTeamsFolder : TreeNodeBase
|
||||
{
|
||||
public cMsGraphResultFileObject Folder = null;
|
||||
public TreeNodeMsTeamsRoot Root;
|
||||
|
||||
public TreeNodeMsTeamsFolder(TreeNodeMsTeamsRoot Root, TreeNodeBase Parent, cMsGraphResultFileObject Folder)
|
||||
{
|
||||
this.Root = Root;
|
||||
this.Parent = Parent;
|
||||
this.Folder = Folder;
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
if (Folder == null)
|
||||
return "";
|
||||
return Folder.DisplayName;
|
||||
}
|
||||
|
||||
public override bool IsResolved()
|
||||
{
|
||||
if (Folder != null && Folder.Folders != null)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
public override string GetInfoText()
|
||||
{
|
||||
if (Folder == null)
|
||||
return "";
|
||||
|
||||
var strInfo = $"Type: Folder";
|
||||
strInfo += $"\r\n\r\nDisplay name: {Folder.DisplayName}";
|
||||
strInfo += $"\r\nIs folder: {Folder.IsFolder}";
|
||||
strInfo += $"\r\n\r\nID: {Folder.ID}";
|
||||
|
||||
return strInfo;
|
||||
}
|
||||
|
||||
override public async Task<List<TreeNodeBase>> ResolveAsync(bool ResolveAlways = false)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (Folder == null)
|
||||
return null;
|
||||
|
||||
if (string.IsNullOrEmpty(Folder.Context) || ResolveAlways)
|
||||
{
|
||||
var Folder2 = await Root.MsSharepoint.RequestFileObjectInfo(Folder.DriveID, Folder.ID, Folder.Drive);
|
||||
if (Folder2 != null)
|
||||
Folder = Folder2;
|
||||
}
|
||||
|
||||
if (Folder.Folders == null)
|
||||
if (!await Folder.ResolveFolders(Root.MsSharepoint))
|
||||
return null;
|
||||
|
||||
var RetVal = new List<TreeNodeBase>()
|
||||
{
|
||||
new TreeNodeMsTeamsPermissionList(Root, this, this.Folder)
|
||||
};
|
||||
|
||||
foreach (var Entry in Folder.Folders.Values)
|
||||
{
|
||||
var Item = new TreeNodeMsTeamsFolder(Root, this, Entry);
|
||||
RetVal.Add(Item);
|
||||
}
|
||||
|
||||
return RetVal;
|
||||
}
|
||||
catch (Exception E)
|
||||
{
|
||||
cLogManager.LogException(E);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public override int ImageIndex()
|
||||
{
|
||||
return 3;
|
||||
}
|
||||
|
||||
public override dynamic GetJsonObject()
|
||||
{
|
||||
return Folder.Result; ;
|
||||
}
|
||||
|
||||
public override string getLastError()
|
||||
{
|
||||
return Root?.MsSharepoint?.Base?.LastErrorMessage ?? "";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public class TreeNodeMsTeamsChannel : TreeNodeBase
|
||||
{
|
||||
public cMsGraphResultChannel Channel = null;
|
||||
public TreeNodeMsTeamsRoot Root;
|
||||
|
||||
public TreeNodeMsTeamsChannel(TreeNodeMsTeamsGroup Group, cMsGraphResultChannel Channel) : base()
|
||||
{
|
||||
this.Root = Group.Root;
|
||||
this.Parent = Group;
|
||||
this.Channel = Channel;
|
||||
}
|
||||
|
||||
public override string GetInfoText()
|
||||
{
|
||||
if (Channel == null)
|
||||
return "";
|
||||
|
||||
var strInfo = $"Type: Channel";
|
||||
strInfo += $"\r\n\r\nDisplay name: {Channel.DisplayName}";
|
||||
var hasRootFolder = Channel.RootFolder != null;
|
||||
strInfo += $"\r\nHas root folder: {hasRootFolder}";
|
||||
strInfo += $"\r\n\r\nID: {Channel.ID}";
|
||||
|
||||
return strInfo;
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
if (Channel == null)
|
||||
return "";
|
||||
return Channel.DisplayName;
|
||||
}
|
||||
|
||||
public override bool IsResolved()
|
||||
{
|
||||
if (Channel != null && Channel.RootFolderResolved)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
override public async Task<List<TreeNodeBase>> ResolveAsync(bool ResolveAlways = false)
|
||||
{
|
||||
if (Channel == null)
|
||||
return null;
|
||||
|
||||
if (Channel.RootFolder == null || ResolveAlways)
|
||||
if (!await Channel.ResolveRootFolder(Root.MsSharepoint))
|
||||
return new List<TreeNodeBase>();
|
||||
|
||||
if (Channel.RootFolder.Folders == null || ResolveAlways)
|
||||
if (!await Channel.RootFolder.ResolveFolders(Root.MsSharepoint))
|
||||
return new List<TreeNodeBase>();
|
||||
|
||||
var RetVal = new List<TreeNodeBase>(Channel.RootFolder.Folders.Count)
|
||||
{
|
||||
new TreeNodeMsTeamsPermissionList(Root, this, Channel.RootFolder)
|
||||
};
|
||||
foreach (var Entry in Channel.RootFolder.Folders.Values)
|
||||
{
|
||||
var Item = new TreeNodeMsTeamsFolder(Root, this, Entry);
|
||||
RetVal.Add(Item);
|
||||
}
|
||||
|
||||
return RetVal;
|
||||
}
|
||||
|
||||
public override int ImageIndex()
|
||||
{
|
||||
if (Channel != null)
|
||||
if (Channel.RootFolder != null)
|
||||
return 2;
|
||||
return 1;
|
||||
}
|
||||
|
||||
public override dynamic GetJsonObject()
|
||||
{
|
||||
return Channel.Result; ;
|
||||
}
|
||||
|
||||
public override string getLastError()
|
||||
{
|
||||
return Root?.MsSharepoint?.Base?.LastErrorMessage ?? "";
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
public class TreeNodeMsTeamsPermissionList : TreeNodeBase
|
||||
{
|
||||
public cMsGraphResultFileObject Folder = null;
|
||||
public TreeNodeMsTeamsRoot Root;
|
||||
|
||||
public TreeNodeMsTeamsPermissionList(TreeNodeMsTeamsRoot Root, TreeNodeBase Parent, cMsGraphResultFileObject Folder) : base()
|
||||
{
|
||||
this.Root = Root;
|
||||
this.Parent = Parent;
|
||||
this.Folder = Folder;
|
||||
}
|
||||
|
||||
public override string GetInfoText()
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return "Permissions";
|
||||
}
|
||||
|
||||
public override bool IsResolved()
|
||||
{
|
||||
if (Folder != null && Folder.Permissions != null)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
override public async Task<List<TreeNodeBase>> ResolveAsync(bool ResolveAlways = false)
|
||||
{
|
||||
var RetVal = new List<TreeNodeBase>();
|
||||
if (Folder.Permissions == null || ResolveAlways)
|
||||
await Folder.ResolvePermissions(Root.MsSharepoint);
|
||||
|
||||
if (Folder.Permissions != null)
|
||||
foreach (var Entry in Folder.Permissions)
|
||||
{
|
||||
if (Entry.Identities == null || Entry.Identities.Count == 0)
|
||||
{
|
||||
var Item = new TreeNodeMsTeamsPermission(this, Entry, null);
|
||||
RetVal.Add(Item);
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (var Identity in Entry.Identities)
|
||||
{
|
||||
var Item = new TreeNodeMsTeamsPermission(this, Entry, Identity);
|
||||
RetVal.Add(Item);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
return RetVal;
|
||||
}
|
||||
|
||||
public override int ImageIndex()
|
||||
{
|
||||
return 4;
|
||||
}
|
||||
|
||||
public override dynamic GetJsonObject()
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
public override bool SupportPermissionAdd()
|
||||
{
|
||||
if (Parent is TreeNodeMsTeamsFolder Fo)
|
||||
if (Fo.Folder != null)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
public override bool SupportPermissionRemoveByValue()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public override async Task<bool> AddPermission(eLiamAccessRoles Role, string Identity)
|
||||
{
|
||||
try
|
||||
{
|
||||
var MsGraphRole = cLiamProviderMsTeams.getMsGraphRole(Role);
|
||||
|
||||
if (this.Parent is TreeNodeMsTeamsFolder Fo)
|
||||
if (Fo.Folder != null)
|
||||
{
|
||||
var Roles = new List<cMsGraphResultPermission.ePermissionRole>()
|
||||
{
|
||||
MsGraphRole
|
||||
};
|
||||
var RetVal = await Fo.Folder.AddPermission(Root.MsSharepoint, Roles, cMsGraphResultPermission.eDriveReceipientType.email, Identity);
|
||||
if (RetVal != null)
|
||||
return true;
|
||||
}
|
||||
}
|
||||
catch (Exception E)
|
||||
{
|
||||
cLogManager.LogException(E);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public override async Task<bool> RemovePermissionByValue(eLiamAccessRoles Role, string Identity)
|
||||
{
|
||||
try
|
||||
{
|
||||
var MsGraphRole = cLiamProviderMsTeams.getMsGraphRole(Role);
|
||||
|
||||
if (this.Parent is TreeNodeMsTeamsFolder Fo)
|
||||
if (Fo.Folder != null)
|
||||
{
|
||||
var RetVal = await Fo.Folder.RemovePermission(Root.MsSharepoint, MsGraphRole, Identity);
|
||||
return RetVal;
|
||||
}
|
||||
}
|
||||
catch (Exception E)
|
||||
{
|
||||
cLogManager.LogException(E);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public override List<eLiamAccessRoles> ValidPermissionRoles()
|
||||
{
|
||||
var RetVal = new List<eLiamAccessRoles>() {
|
||||
eLiamAccessRoles.Read,
|
||||
eLiamAccessRoles.Write
|
||||
};
|
||||
return RetVal;
|
||||
}
|
||||
|
||||
public override string getLastError()
|
||||
{
|
||||
return Root?.MsSharepoint?.Base?.LastErrorMessage ?? "";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public class TreeNodeMsTeamsPermission : TreeNodeBase
|
||||
{
|
||||
public cMsGraphResultPermission Permission = null;
|
||||
|
||||
public cMsGraphResultPermission.cMsGraphPermissionIdentity Identity = null;
|
||||
public TreeNodeMsTeamsRoot Root;
|
||||
|
||||
public TreeNodeMsTeamsPermission(TreeNodeMsTeamsPermissionList Folder, cMsGraphResultPermission Permission, cMsGraphResultPermission.cMsGraphPermissionIdentity Identity) : base()
|
||||
{
|
||||
this.Root = Folder.Root;
|
||||
this.Parent = Folder;
|
||||
this.Permission = Permission;
|
||||
this.Identity = Identity;
|
||||
}
|
||||
|
||||
public override bool AutoResolved()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public override string GetInfoText()
|
||||
{
|
||||
if (Permission == null)
|
||||
return "";
|
||||
|
||||
var strInfo = $"Type: Permission (-unknown-)";
|
||||
|
||||
if (Permission is cMsGraphResultPermission.PermissionDirect)
|
||||
strInfo = $"Type: Permission (direkt)";
|
||||
else if (Permission is cMsGraphResultPermission.PermissionLink Link)
|
||||
{
|
||||
strInfo = $"Type: Permission (link)";
|
||||
strInfo += $"\r\n\r\nScope: {Link?.Scope ?? ""}";
|
||||
strInfo += $"\r\nPrevents download: {Link?.PreventsDownload ?? ""}";
|
||||
strInfo += $"\r\nWEB URL: {Link?.WebUrl ?? ""}";
|
||||
}
|
||||
|
||||
strInfo += $"\r\n\r\nPermission ID: {Permission?.ID ?? ""}";
|
||||
strInfo += $"\r\nIs inherited: {Permission?.isInherited.ToString() ?? ""}";
|
||||
|
||||
var strRoles = "";
|
||||
if (Permission.Roles != null)
|
||||
foreach (var Entry in Permission.Roles)
|
||||
{
|
||||
if (strRoles != "")
|
||||
strRoles += "";
|
||||
strRoles += Entry;
|
||||
}
|
||||
|
||||
strInfo += $"\r\n\r\nRoles: {strRoles}";
|
||||
|
||||
if (Identity == null)
|
||||
{
|
||||
strInfo += $"\r\n\r\nNo identities assigned";
|
||||
}
|
||||
else
|
||||
{
|
||||
var strType = "-unknown-";
|
||||
switch (Identity?.IdentityType)
|
||||
{
|
||||
case cMsGraphResultPermission.cMsGraphPermissionIdentity.eIdentityType.application:
|
||||
strType = "Application";
|
||||
break;
|
||||
case cMsGraphResultPermission.cMsGraphPermissionIdentity.eIdentityType.device:
|
||||
strType = "Device";
|
||||
break;
|
||||
case cMsGraphResultPermission.cMsGraphPermissionIdentity.eIdentityType.user:
|
||||
strType = "User or group";
|
||||
break;
|
||||
}
|
||||
strInfo += $"\r\n\r\nIdentity type: {strType}";
|
||||
strInfo += $"\r\nIdentity name: {Identity?.DisplayName ?? ""}";
|
||||
strInfo += $"\r\nIdentity email: {Identity?.EMail ?? ""}";
|
||||
strInfo += $"\r\nIdentity ID: {Identity?.ID ?? ""}";
|
||||
}
|
||||
|
||||
|
||||
return strInfo;
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
try
|
||||
{
|
||||
if (Permission == null)
|
||||
return "";
|
||||
|
||||
var strName = "Unknown:";
|
||||
if (Permission is cMsGraphResultPermission.PermissionDirect)
|
||||
strName = "Direct: ";
|
||||
else if (Permission is cMsGraphResultPermission.PermissionLink)
|
||||
strName = "Link: ";
|
||||
|
||||
strName += $" {Identity?.DisplayName ?? "(no identities)"} =";
|
||||
|
||||
var strRoles = "";
|
||||
if (Permission.Roles != null)
|
||||
foreach (var Entry in Permission.Roles)
|
||||
strRoles += " " + Entry;
|
||||
return strName + strRoles;
|
||||
}
|
||||
catch (Exception E)
|
||||
{
|
||||
cLogManager.LogException(E);
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
public override bool IsResolved()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
override public async Task<List<TreeNodeBase>> ResolveAsync(bool ResolveAlways = false)
|
||||
{
|
||||
await Task.Delay(0);
|
||||
return new List<TreeNodeBase>();
|
||||
}
|
||||
|
||||
public override int ImageIndex()
|
||||
{
|
||||
if (Permission.isInherited)
|
||||
return 5;
|
||||
|
||||
|
||||
return 6;
|
||||
}
|
||||
|
||||
public override dynamic GetJsonObject()
|
||||
{
|
||||
return Permission.Result;
|
||||
}
|
||||
|
||||
public override bool SupportPermissionRemoveDirect()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public override async Task<bool> RemovePermissionDirect()
|
||||
{
|
||||
try
|
||||
{
|
||||
if (Permission == null)
|
||||
return false;
|
||||
|
||||
if (Identity == null)
|
||||
{
|
||||
var rv = await Permission.Delete(Root.MsSharepoint);
|
||||
return rv;
|
||||
}
|
||||
|
||||
var RT = cMsGraphResultPermission.eDriveReceipientType.email;
|
||||
var RN = Identity?.EMail;
|
||||
if (!string.IsNullOrEmpty(Identity.ID))
|
||||
{
|
||||
RT = cMsGraphResultPermission.eDriveReceipientType.objectId;
|
||||
RN = Identity.ID;
|
||||
}
|
||||
var RetVal = await Permission.RevokeGrant(Root.MsSharepoint, RT, RN);
|
||||
|
||||
return RetVal;
|
||||
}
|
||||
catch (Exception E)
|
||||
{
|
||||
cLogManager.LogException(E);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public override string getLastError()
|
||||
{
|
||||
return Root?.MsSharepoint?.Base?.LastErrorMessage ?? "";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
26
LiamTestTeams/Program.cs
Normal file
26
LiamTestTeams/Program.cs
Normal file
@@ -0,0 +1,26 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
using C4IT.Logging;
|
||||
|
||||
namespace LiamTestTeams
|
||||
{
|
||||
static class Program
|
||||
{
|
||||
/// <summary>
|
||||
/// The main entry point for the application.
|
||||
/// </summary>
|
||||
[STAThread]
|
||||
static void Main()
|
||||
{
|
||||
cLogManagerFile.CreateInstance(cLogManagerFile.GetDefaultPath(false, SubFolder: "logs"));
|
||||
|
||||
Application.EnableVisualStyles();
|
||||
Application.SetCompatibleTextRenderingDefault(false);
|
||||
Application.Run(new frmMain());
|
||||
}
|
||||
}
|
||||
}
|
||||
11
LiamTestTeams/Properties/AssemblyInfo.cs
Normal file
11
LiamTestTeams/Properties/AssemblyInfo.cs
Normal file
@@ -0,0 +1,11 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
[assembly: AssemblyTitle("LIAM Testing for MS Teams & Sharepoint")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
[assembly: Guid("6197c490-07c6-4313-8e0f-aadc27776473")]
|
||||
70
LiamTestTeams/Properties/Resources.Designer.cs
generated
Normal file
70
LiamTestTeams/Properties/Resources.Designer.cs
generated
Normal file
@@ -0,0 +1,70 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:4.0.30319.42000
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
|
||||
namespace LiamTestTeams.Properties
|
||||
{
|
||||
/// <summary>
|
||||
/// A strongly-typed resource class, for looking up localized strings, etc.
|
||||
/// </summary>
|
||||
// This class was auto-generated by the StronglyTypedResourceBuilder
|
||||
// class via a tool like ResGen or Visual Studio.
|
||||
// To add or remove a member, edit your .ResX file then rerun ResGen
|
||||
// with the /str option, or rebuild your VS project.
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
internal class Resources
|
||||
{
|
||||
|
||||
private static global::System.Resources.ResourceManager resourceMan;
|
||||
|
||||
private static global::System.Globalization.CultureInfo resourceCulture;
|
||||
|
||||
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
internal Resources()
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the cached ResourceManager instance used by this class.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Resources.ResourceManager ResourceManager
|
||||
{
|
||||
get
|
||||
{
|
||||
if ((resourceMan == null))
|
||||
{
|
||||
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("LiamTestTeams.Properties.Resources", typeof(Resources).Assembly);
|
||||
resourceMan = temp;
|
||||
}
|
||||
return resourceMan;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Overrides the current thread's CurrentUICulture property for all
|
||||
/// resource lookups using this strongly typed resource class.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Globalization.CultureInfo Culture
|
||||
{
|
||||
get
|
||||
{
|
||||
return resourceCulture;
|
||||
}
|
||||
set
|
||||
{
|
||||
resourceCulture = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
117
LiamTestTeams/Properties/Resources.resx
Normal file
117
LiamTestTeams/Properties/Resources.resx
Normal file
@@ -0,0 +1,117 @@
|
||||
<?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.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: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" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
</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" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
</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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
</root>
|
||||
29
LiamTestTeams/Properties/Settings.Designer.cs
generated
Normal file
29
LiamTestTeams/Properties/Settings.Designer.cs
generated
Normal file
@@ -0,0 +1,29 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:4.0.30319.42000
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
|
||||
namespace LiamTestTeams.Properties
|
||||
{
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
|
||||
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
|
||||
{
|
||||
|
||||
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
||||
|
||||
public static Settings Default
|
||||
{
|
||||
get
|
||||
{
|
||||
return defaultInstance;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
7
LiamTestTeams/Properties/Settings.settings
Normal file
7
LiamTestTeams/Properties/Settings.settings
Normal file
@@ -0,0 +1,7 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
|
||||
<Profiles>
|
||||
<Profile Name="(Default)" />
|
||||
</Profiles>
|
||||
<Settings />
|
||||
</SettingsFile>
|
||||
BIN
LiamTestTeams/bin/Debug/LiamBaseClasses.dll
Normal file
BIN
LiamTestTeams/bin/Debug/LiamBaseClasses.dll
Normal file
Binary file not shown.
BIN
LiamTestTeams/bin/Debug/LiamBaseClasses.pdb
Normal file
BIN
LiamTestTeams/bin/Debug/LiamBaseClasses.pdb
Normal file
Binary file not shown.
BIN
LiamTestTeams/bin/Debug/LiamHelper.dll
Normal file
BIN
LiamTestTeams/bin/Debug/LiamHelper.dll
Normal file
Binary file not shown.
BIN
LiamTestTeams/bin/Debug/LiamHelper.pdb
Normal file
BIN
LiamTestTeams/bin/Debug/LiamHelper.pdb
Normal file
Binary file not shown.
BIN
LiamTestTeams/bin/Debug/LiamMsGraph.dll
Normal file
BIN
LiamTestTeams/bin/Debug/LiamMsGraph.dll
Normal file
Binary file not shown.
BIN
LiamTestTeams/bin/Debug/LiamMsGraph.pdb
Normal file
BIN
LiamTestTeams/bin/Debug/LiamMsGraph.pdb
Normal file
Binary file not shown.
BIN
LiamTestTeams/bin/Debug/LiamMsTeams.dll
Normal file
BIN
LiamTestTeams/bin/Debug/LiamMsTeams.dll
Normal file
Binary file not shown.
BIN
LiamTestTeams/bin/Debug/LiamMsTeams.pdb
Normal file
BIN
LiamTestTeams/bin/Debug/LiamMsTeams.pdb
Normal file
Binary file not shown.
BIN
LiamTestTeams/bin/Debug/LiamTestTeams.exe
Normal file
BIN
LiamTestTeams/bin/Debug/LiamTestTeams.exe
Normal file
Binary file not shown.
38
LiamTestTeams/bin/Debug/LiamTestTeams.exe.config
Normal file
38
LiamTestTeams/bin/Debug/LiamTestTeams.exe.config
Normal file
@@ -0,0 +1,38 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2" />
|
||||
</startup>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.1" newVersion="4.0.1.1" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Newtonsoft.Json" culture="neutral" publicKeyToken="30ad4fe6b2a6aeed" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.ValueTuple" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Diagnostics.DiagnosticSource" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-5.0.0.1" newVersion="5.0.0.1" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.Graph.Core" publicKeyToken="31bf3856ad364e35" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-1.24.0.0" newVersion="1.24.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.Identity.Client" publicKeyToken="0a613f4dd989e8ae" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.27.0.0" newVersion="4.27.0.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
</configuration>
|
||||
BIN
LiamTestTeams/bin/Debug/LiamTestTeams.pdb
Normal file
BIN
LiamTestTeams/bin/Debug/LiamTestTeams.pdb
Normal file
Binary file not shown.
BIN
LiamTestTeams/bin/Debug/Newtonsoft.Json.dll
Normal file
BIN
LiamTestTeams/bin/Debug/Newtonsoft.Json.dll
Normal file
Binary file not shown.
BIN
LiamTestTeams/bin/Release/LiamBaseClasses.dll
Normal file
BIN
LiamTestTeams/bin/Release/LiamBaseClasses.dll
Normal file
Binary file not shown.
BIN
LiamTestTeams/bin/Release/LiamBaseClasses.pdb
Normal file
BIN
LiamTestTeams/bin/Release/LiamBaseClasses.pdb
Normal file
Binary file not shown.
BIN
LiamTestTeams/bin/Release/LiamHelper.dll
Normal file
BIN
LiamTestTeams/bin/Release/LiamHelper.dll
Normal file
Binary file not shown.
BIN
LiamTestTeams/bin/Release/LiamHelper.pdb
Normal file
BIN
LiamTestTeams/bin/Release/LiamHelper.pdb
Normal file
Binary file not shown.
BIN
LiamTestTeams/bin/Release/LiamMsGraph.dll
Normal file
BIN
LiamTestTeams/bin/Release/LiamMsGraph.dll
Normal file
Binary file not shown.
BIN
LiamTestTeams/bin/Release/LiamMsGraph.pdb
Normal file
BIN
LiamTestTeams/bin/Release/LiamMsGraph.pdb
Normal file
Binary file not shown.
BIN
LiamTestTeams/bin/Release/LiamMsTeams.dll
Normal file
BIN
LiamTestTeams/bin/Release/LiamMsTeams.dll
Normal file
Binary file not shown.
BIN
LiamTestTeams/bin/Release/LiamMsTeams.pdb
Normal file
BIN
LiamTestTeams/bin/Release/LiamMsTeams.pdb
Normal file
Binary file not shown.
BIN
LiamTestTeams/bin/Release/LiamTestTeams.exe
Normal file
BIN
LiamTestTeams/bin/Release/LiamTestTeams.exe
Normal file
Binary file not shown.
38
LiamTestTeams/bin/Release/LiamTestTeams.exe.config
Normal file
38
LiamTestTeams/bin/Release/LiamTestTeams.exe.config
Normal file
@@ -0,0 +1,38 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2" />
|
||||
</startup>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.1" newVersion="4.0.1.1" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Newtonsoft.Json" culture="neutral" publicKeyToken="30ad4fe6b2a6aeed" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.ValueTuple" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Diagnostics.DiagnosticSource" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-5.0.0.1" newVersion="5.0.0.1" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.Graph.Core" publicKeyToken="31bf3856ad364e35" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-1.24.0.0" newVersion="1.24.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.Identity.Client" publicKeyToken="0a613f4dd989e8ae" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.27.0.0" newVersion="4.27.0.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
</configuration>
|
||||
BIN
LiamTestTeams/bin/Release/LiamTestTeams.pdb
Normal file
BIN
LiamTestTeams/bin/Release/LiamTestTeams.pdb
Normal file
Binary file not shown.
BIN
LiamTestTeams/bin/Release/Newtonsoft.Json.dll
Normal file
BIN
LiamTestTeams/bin/Release/Newtonsoft.Json.dll
Normal file
Binary file not shown.
36
LiamTestTeams/cLiamTestTeamsConfig.cs
Normal file
36
LiamTestTeams/cLiamTestTeamsConfig.cs
Normal file
@@ -0,0 +1,36 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
using C4IT.Configuration;
|
||||
using C4IT.Security;
|
||||
|
||||
namespace LiamTestTeams
|
||||
{
|
||||
public class cLiamTestTeamsConfig
|
||||
{
|
||||
public const string constRegPathConfig = @"Software\Consulting4IT GmbH\LIAM\LiamTestTeams";
|
||||
|
||||
[RegConfig]
|
||||
public string Tenant = "";
|
||||
|
||||
[RegConfig]
|
||||
public string ClientAppID = "";
|
||||
|
||||
[RegConfig]
|
||||
public string ClientSecret = "";
|
||||
|
||||
public void Save(string Property = null)
|
||||
{
|
||||
cConfigRegistryHelper.Save(constRegPathConfig, this, Property);
|
||||
}
|
||||
|
||||
public void Load()
|
||||
{
|
||||
cConfigRegistryHelper.Load(constRegPathConfig, this, true);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
251
LiamTestTeams/ctrlTabLiam.Designer.cs
generated
Normal file
251
LiamTestTeams/ctrlTabLiam.Designer.cs
generated
Normal file
@@ -0,0 +1,251 @@
|
||||
|
||||
namespace LiamTestTeams
|
||||
{
|
||||
partial class ctrlTabLiam
|
||||
{
|
||||
/// <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 Component 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.components = new System.ComponentModel.Container();
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ctrlTabLiam));
|
||||
this.splitContainer1 = new System.Windows.Forms.SplitContainer();
|
||||
this.treeViewTeams = new System.Windows.Forms.TreeView();
|
||||
this.contextMenuStripTreeNode = new System.Windows.Forms.ContextMenuStrip(this.components);
|
||||
this.ToolStripMenuItemRefresh = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripMenuItemGetJson = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.toolStripMenuItemAddPermission = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripMenuItemRemovePermission = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.imageList1 = new System.Windows.Forms.ImageList(this.components);
|
||||
this.labelTitel = new System.Windows.Forms.Label();
|
||||
this.textBoxErrorMessage = new System.Windows.Forms.TextBox();
|
||||
this.textBoxDetails = new System.Windows.Forms.TextBox();
|
||||
this.label2 = new System.Windows.Forms.Label();
|
||||
this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.toolStripMenuItemLoadFromUID = new System.Windows.Forms.ToolStripMenuItem();
|
||||
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
|
||||
this.splitContainer1.Panel1.SuspendLayout();
|
||||
this.splitContainer1.Panel2.SuspendLayout();
|
||||
this.splitContainer1.SuspendLayout();
|
||||
this.contextMenuStripTreeNode.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// splitContainer1
|
||||
//
|
||||
this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.splitContainer1.Location = new System.Drawing.Point(0, 0);
|
||||
this.splitContainer1.Name = "splitContainer1";
|
||||
//
|
||||
// splitContainer1.Panel1
|
||||
//
|
||||
this.splitContainer1.Panel1.Controls.Add(this.treeViewTeams);
|
||||
this.splitContainer1.Panel1.Controls.Add(this.labelTitel);
|
||||
//
|
||||
// splitContainer1.Panel2
|
||||
//
|
||||
this.splitContainer1.Panel2.Controls.Add(this.textBoxErrorMessage);
|
||||
this.splitContainer1.Panel2.Controls.Add(this.textBoxDetails);
|
||||
this.splitContainer1.Panel2.Controls.Add(this.label2);
|
||||
this.splitContainer1.Size = new System.Drawing.Size(556, 293);
|
||||
this.splitContainer1.SplitterDistance = 276;
|
||||
this.splitContainer1.TabIndex = 0;
|
||||
//
|
||||
// treeViewTeams
|
||||
//
|
||||
this.treeViewTeams.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.treeViewTeams.ContextMenuStrip = this.contextMenuStripTreeNode;
|
||||
this.treeViewTeams.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.treeViewTeams.FullRowSelect = true;
|
||||
this.treeViewTeams.HideSelection = false;
|
||||
this.treeViewTeams.ImageIndex = 0;
|
||||
this.treeViewTeams.ImageList = this.imageList1;
|
||||
this.treeViewTeams.Location = new System.Drawing.Point(3, 26);
|
||||
this.treeViewTeams.Name = "treeViewTeams";
|
||||
this.treeViewTeams.SelectedImageIndex = 0;
|
||||
this.treeViewTeams.Size = new System.Drawing.Size(270, 264);
|
||||
this.treeViewTeams.TabIndex = 1;
|
||||
this.treeViewTeams.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeViewTeams_AfterSelect);
|
||||
//
|
||||
// contextMenuStripTreeNode
|
||||
//
|
||||
this.contextMenuStripTreeNode.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.ToolStripMenuItemRefresh,
|
||||
this.toolStripMenuItemGetJson,
|
||||
this.toolStripSeparator1,
|
||||
this.toolStripMenuItemAddPermission,
|
||||
this.toolStripMenuItemRemovePermission,
|
||||
this.toolStripSeparator2,
|
||||
this.toolStripMenuItemLoadFromUID});
|
||||
this.contextMenuStripTreeNode.Name = "contextMenuStripTreeNode";
|
||||
this.contextMenuStripTreeNode.Size = new System.Drawing.Size(181, 148);
|
||||
//
|
||||
// ToolStripMenuItemRefresh
|
||||
//
|
||||
this.ToolStripMenuItemRefresh.Name = "ToolStripMenuItemRefresh";
|
||||
this.ToolStripMenuItemRefresh.Size = new System.Drawing.Size(180, 22);
|
||||
this.ToolStripMenuItemRefresh.Text = "Refresh";
|
||||
this.ToolStripMenuItemRefresh.Click += new System.EventHandler(this.ToolStripMenuItemRefresh_Click);
|
||||
//
|
||||
// toolStripMenuItemGetJson
|
||||
//
|
||||
this.toolStripMenuItemGetJson.Name = "toolStripMenuItemGetJson";
|
||||
this.toolStripMenuItemGetJson.Size = new System.Drawing.Size(180, 22);
|
||||
this.toolStripMenuItemGetJson.Text = "Get json string";
|
||||
this.toolStripMenuItemGetJson.Click += new System.EventHandler(this.toolStripMenuItemGetJson_Click);
|
||||
//
|
||||
// toolStripSeparator1
|
||||
//
|
||||
this.toolStripSeparator1.Name = "toolStripSeparator1";
|
||||
this.toolStripSeparator1.Size = new System.Drawing.Size(177, 6);
|
||||
//
|
||||
// toolStripMenuItemAddPermission
|
||||
//
|
||||
this.toolStripMenuItemAddPermission.Enabled = false;
|
||||
this.toolStripMenuItemAddPermission.Name = "toolStripMenuItemAddPermission";
|
||||
this.toolStripMenuItemAddPermission.Size = new System.Drawing.Size(180, 22);
|
||||
this.toolStripMenuItemAddPermission.Text = "Add permission";
|
||||
this.toolStripMenuItemAddPermission.Click += new System.EventHandler(this.toolStripMenuItemAddPermission_Click);
|
||||
//
|
||||
// toolStripMenuItemRemovePermission
|
||||
//
|
||||
this.toolStripMenuItemRemovePermission.Enabled = false;
|
||||
this.toolStripMenuItemRemovePermission.Name = "toolStripMenuItemRemovePermission";
|
||||
this.toolStripMenuItemRemovePermission.Size = new System.Drawing.Size(180, 22);
|
||||
this.toolStripMenuItemRemovePermission.Text = "Remove permission";
|
||||
this.toolStripMenuItemRemovePermission.Click += new System.EventHandler(this.toolStripMenuItemRemovePermission_Click);
|
||||
//
|
||||
// imageList1
|
||||
//
|
||||
this.imageList1.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList1.ImageStream")));
|
||||
this.imageList1.TransparentColor = System.Drawing.Color.Transparent;
|
||||
this.imageList1.Images.SetKeyName(0, "Team_32.png");
|
||||
this.imageList1.Images.SetKeyName(1, "Channel_32.png");
|
||||
this.imageList1.Images.SetKeyName(2, "ChannelFolder_32.png");
|
||||
this.imageList1.Images.SetKeyName(3, "Folder_32.png");
|
||||
this.imageList1.Images.SetKeyName(4, "permission_32.png");
|
||||
this.imageList1.Images.SetKeyName(5, "permission2_32.png");
|
||||
this.imageList1.Images.SetKeyName(6, "permission3_32.png");
|
||||
this.imageList1.Images.SetKeyName(7, "Error_32.png");
|
||||
this.imageList1.Images.SetKeyName(8, "Unknown_32.png");
|
||||
//
|
||||
// labelTitel
|
||||
//
|
||||
this.labelTitel.AutoSize = true;
|
||||
this.labelTitel.Location = new System.Drawing.Point(3, 10);
|
||||
this.labelTitel.Name = "labelTitel";
|
||||
this.labelTitel.Size = new System.Drawing.Size(61, 13);
|
||||
this.labelTitel.TabIndex = 0;
|
||||
this.labelTitel.Text = "MS Teams:";
|
||||
//
|
||||
// textBoxErrorMessage
|
||||
//
|
||||
this.textBoxErrorMessage.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.textBoxErrorMessage.ForeColor = System.Drawing.Color.Maroon;
|
||||
this.textBoxErrorMessage.Location = new System.Drawing.Point(6, 209);
|
||||
this.textBoxErrorMessage.Multiline = true;
|
||||
this.textBoxErrorMessage.Name = "textBoxErrorMessage";
|
||||
this.textBoxErrorMessage.ReadOnly = true;
|
||||
this.textBoxErrorMessage.Size = new System.Drawing.Size(267, 81);
|
||||
this.textBoxErrorMessage.TabIndex = 2;
|
||||
this.textBoxErrorMessage.Visible = false;
|
||||
//
|
||||
// textBoxDetails
|
||||
//
|
||||
this.textBoxDetails.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.textBoxDetails.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.textBoxDetails.Location = new System.Drawing.Point(6, 26);
|
||||
this.textBoxDetails.Multiline = true;
|
||||
this.textBoxDetails.Name = "textBoxDetails";
|
||||
this.textBoxDetails.ReadOnly = true;
|
||||
this.textBoxDetails.ScrollBars = System.Windows.Forms.ScrollBars.Both;
|
||||
this.textBoxDetails.Size = new System.Drawing.Size(267, 264);
|
||||
this.textBoxDetails.TabIndex = 1;
|
||||
this.textBoxDetails.WordWrap = false;
|
||||
//
|
||||
// label2
|
||||
//
|
||||
this.label2.AutoSize = true;
|
||||
this.label2.Location = new System.Drawing.Point(3, 10);
|
||||
this.label2.Name = "label2";
|
||||
this.label2.Size = new System.Drawing.Size(42, 13);
|
||||
this.label2.TabIndex = 0;
|
||||
this.label2.Text = "Details:";
|
||||
//
|
||||
// toolStripSeparator2
|
||||
//
|
||||
this.toolStripSeparator2.Name = "toolStripSeparator2";
|
||||
this.toolStripSeparator2.Size = new System.Drawing.Size(177, 6);
|
||||
//
|
||||
// toolStripMenuItemLoadFromUID
|
||||
//
|
||||
this.toolStripMenuItemLoadFromUID.Enabled = false;
|
||||
this.toolStripMenuItemLoadFromUID.Name = "toolStripMenuItemLoadFromUID";
|
||||
this.toolStripMenuItemLoadFromUID.Size = new System.Drawing.Size(180, 22);
|
||||
this.toolStripMenuItemLoadFromUID.Text = "Try load from UID";
|
||||
this.toolStripMenuItemLoadFromUID.Click += new System.EventHandler(this.toolStripMenuItemLoadFromUID_Click);
|
||||
//
|
||||
// ctrlTabLiam
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.Controls.Add(this.splitContainer1);
|
||||
this.Name = "ctrlTabLiam";
|
||||
this.Size = new System.Drawing.Size(556, 293);
|
||||
this.splitContainer1.Panel1.ResumeLayout(false);
|
||||
this.splitContainer1.Panel1.PerformLayout();
|
||||
this.splitContainer1.Panel2.ResumeLayout(false);
|
||||
this.splitContainer1.Panel2.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
|
||||
this.splitContainer1.ResumeLayout(false);
|
||||
this.contextMenuStripTreeNode.ResumeLayout(false);
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.SplitContainer splitContainer1;
|
||||
private System.Windows.Forms.TreeView treeViewTeams;
|
||||
private System.Windows.Forms.Label labelTitel;
|
||||
private System.Windows.Forms.TextBox textBoxDetails;
|
||||
private System.Windows.Forms.Label label2;
|
||||
private System.Windows.Forms.ImageList imageList1;
|
||||
private System.Windows.Forms.ContextMenuStrip contextMenuStripTreeNode;
|
||||
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemGetJson;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
|
||||
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemAddPermission;
|
||||
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemRemovePermission;
|
||||
private System.Windows.Forms.ToolStripMenuItem ToolStripMenuItemRefresh;
|
||||
private System.Windows.Forms.TextBox textBoxErrorMessage;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
|
||||
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemLoadFromUID;
|
||||
}
|
||||
}
|
||||
457
LiamTestTeams/ctrlTabLiam.cs
Normal file
457
LiamTestTeams/ctrlTabLiam.cs
Normal file
@@ -0,0 +1,457 @@
|
||||
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.Diagnostics;
|
||||
|
||||
using Newtonsoft.Json;
|
||||
|
||||
using C4IT.Logging;
|
||||
using C4IT.LIAM;
|
||||
using System.Reflection;
|
||||
using static C4IT.Logging.cLogManager;
|
||||
|
||||
namespace LiamTestTeams
|
||||
{
|
||||
public partial class ctrlTabLiam : UserControl
|
||||
{
|
||||
|
||||
public ctrlTabLiam()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
public void SetTitle(string Title)
|
||||
{
|
||||
labelTitel.Text = Title;
|
||||
}
|
||||
|
||||
public async Task Refresh(TreeNodeRoot RootNode)
|
||||
{
|
||||
treeViewTeams.Nodes.Clear();
|
||||
|
||||
|
||||
var listGroups = await RootNode.ResolveAsync();
|
||||
ShowErrorMessage(RootNode.getLastError());
|
||||
|
||||
if (listGroups == null)
|
||||
return;
|
||||
|
||||
foreach (var Entry in listGroups)
|
||||
{
|
||||
var tr = new TreeNode(Entry.ToString())
|
||||
{
|
||||
ImageIndex = Entry.ImageIndex(),
|
||||
SelectedImageIndex = Entry.ImageIndex(),
|
||||
Tag = Entry,
|
||||
ForeColor = Color.Gray,
|
||||
};
|
||||
treeViewTeams.Nodes.Add(tr);
|
||||
}
|
||||
}
|
||||
|
||||
private async void treeViewTeams_AfterSelect(object sender, TreeViewEventArgs e)
|
||||
{
|
||||
if (treeViewTeams.SelectedNode == null && treeViewTeams.SelectedNode.Tag == null)
|
||||
{
|
||||
textBoxDetails.Text = "";
|
||||
return;
|
||||
}
|
||||
|
||||
var tag = treeViewTeams.SelectedNode.Tag;
|
||||
|
||||
if (tag is TreeNodeBase NodeInfo)
|
||||
{
|
||||
if (NodeInfo.SupportPermissionAdd())
|
||||
toolStripMenuItemAddPermission.Enabled = true;
|
||||
else
|
||||
toolStripMenuItemAddPermission.Enabled = false;
|
||||
if (NodeInfo.SupportPermissionRemoveDirect() || NodeInfo.SupportPermissionRemoveByValue())
|
||||
toolStripMenuItemRemovePermission.Enabled = true;
|
||||
else
|
||||
toolStripMenuItemRemovePermission.Enabled = false;
|
||||
if (NodeInfo.GetUID() != null)
|
||||
toolStripMenuItemLoadFromUID.Enabled = true;
|
||||
else
|
||||
toolStripMenuItemLoadFromUID.Enabled = false;
|
||||
|
||||
if (NodeInfo.IsResolved())
|
||||
{
|
||||
textBoxDetails.Text = NodeInfo.GetInfoText();
|
||||
return;
|
||||
}
|
||||
|
||||
Cursor = Cursors.WaitCursor;
|
||||
treeViewTeams.Enabled = false;
|
||||
try
|
||||
{
|
||||
await UpdateNode(treeViewTeams.SelectedNode, false);
|
||||
}
|
||||
catch { };
|
||||
|
||||
treeViewTeams.Enabled = true;
|
||||
Cursor = Cursors.Default;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private async Task UpdateNode(TreeNode Node, bool ResolveAlways)
|
||||
{
|
||||
try
|
||||
{
|
||||
Node.Nodes.Clear();
|
||||
|
||||
if (!(Node.Tag is TreeNodeBase NodeInfo))
|
||||
{
|
||||
Node.Text = "- Error -";
|
||||
Node.ImageIndex = 7;
|
||||
Node.SelectedImageIndex = 7;
|
||||
return;
|
||||
}
|
||||
|
||||
var SubItems = await NodeInfo.ResolveAsync(ResolveAlways);
|
||||
ShowErrorMessage(NodeInfo.getLastError());
|
||||
|
||||
textBoxDetails.Text = NodeInfo.GetInfoText();
|
||||
|
||||
if (SubItems != null)
|
||||
{
|
||||
Node.ImageIndex = NodeInfo.ImageIndex();
|
||||
Node.SelectedImageIndex = Node.ImageIndex;
|
||||
treeViewTeams.BeginUpdate();
|
||||
try
|
||||
{
|
||||
foreach (var Entry in SubItems)
|
||||
{
|
||||
var tr = new TreeNode(Entry.ToString())
|
||||
{
|
||||
Tag = Entry,
|
||||
ImageIndex = Entry.ImageIndex(),
|
||||
SelectedImageIndex = Entry.ImageIndex()
|
||||
};
|
||||
|
||||
if (Entry.AutoResolved())
|
||||
tr.ForeColor = Color.Black;
|
||||
else
|
||||
tr.ForeColor = Color.Gray;
|
||||
|
||||
treeViewTeams.SelectedNode.Nodes.Add(tr);
|
||||
}
|
||||
treeViewTeams.SelectedNode.Expand();
|
||||
treeViewTeams.SelectedNode.ForeColor = Color.Black;
|
||||
}
|
||||
catch (Exception E)
|
||||
{
|
||||
cLogManager.LogException(E);
|
||||
}
|
||||
finally
|
||||
{
|
||||
treeViewTeams.EndUpdate();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Node.ImageIndex = 7;
|
||||
Node.SelectedImageIndex = 7;
|
||||
}
|
||||
}
|
||||
catch (Exception E)
|
||||
{
|
||||
cLogManager.LogException(E);
|
||||
Node.ImageIndex = 7;
|
||||
Node.SelectedImageIndex = 7;
|
||||
}
|
||||
}
|
||||
|
||||
private void toolStripMenuItemGetJson_Click(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
try
|
||||
{
|
||||
if (treeViewTeams.SelectedNode == null)
|
||||
return;
|
||||
|
||||
if (!(treeViewTeams.SelectedNode.Tag is TreeNodeBase tn))
|
||||
return;
|
||||
|
||||
var strJson = tn.GetJson();
|
||||
|
||||
if (string.IsNullOrWhiteSpace(strJson))
|
||||
return;
|
||||
|
||||
var FN = Path.GetTempPath();
|
||||
FN = Path.Combine(FN, "LiamTestTeams");
|
||||
Directory.CreateDirectory(FN);
|
||||
var FN2 = cLogManagerFile.BuildFileName(treeViewTeams.SelectedNode.Text) + ".json";
|
||||
FN = Path.Combine(FN, FN2);
|
||||
|
||||
File.WriteAllText(FN, strJson);
|
||||
|
||||
var strEditor = Environment.ExpandEnvironmentVariables(@"%ProgramFiles%\Notepad++\notepad++.exe");
|
||||
if (!File.Exists(strEditor))
|
||||
strEditor = Environment.ExpandEnvironmentVariables(@"%ProgramFiles(x86)%\Notepad++\notepad++.exe");
|
||||
if (!File.Exists(strEditor))
|
||||
strEditor = Environment.ExpandEnvironmentVariables(@"%windir%\notepad.exe");
|
||||
|
||||
var PI = new ProcessStartInfo()
|
||||
{
|
||||
FileName = strEditor,
|
||||
Arguments = "\"" + FN + "\"",
|
||||
UseShellExecute = false
|
||||
};
|
||||
|
||||
Process.Start(PI);
|
||||
|
||||
}
|
||||
catch (Exception E)
|
||||
{
|
||||
cLogManager.LogException(E);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private async void ToolStripMenuItemRefresh_Click(object sender, EventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (treeViewTeams.SelectedNode == null)
|
||||
return;
|
||||
|
||||
if (!(treeViewTeams.SelectedNode.Tag is TreeNodeBase tn))
|
||||
return;
|
||||
|
||||
Cursor = Cursors.WaitCursor;
|
||||
treeViewTeams.Enabled = false;
|
||||
|
||||
await UpdateNode(treeViewTeams.SelectedNode, true);
|
||||
}
|
||||
catch (Exception E)
|
||||
{
|
||||
cLogManager.LogException(E);
|
||||
}
|
||||
finally
|
||||
{
|
||||
treeViewTeams.Enabled = true;
|
||||
Cursor = Cursors.Default;
|
||||
}
|
||||
}
|
||||
|
||||
private async void toolStripMenuItemAddPermission_Click(object sender, EventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (treeViewTeams.SelectedNode == null)
|
||||
return;
|
||||
|
||||
if (!(treeViewTeams.SelectedNode.Tag is TreeNodeBase tn))
|
||||
return;
|
||||
|
||||
if (!tn.SupportPermissionAdd())
|
||||
return;
|
||||
|
||||
var ValidRoles = tn.ValidPermissionRoles();
|
||||
if (ValidRoles == null || ValidRoles.Count == 0)
|
||||
return;
|
||||
|
||||
var dlgInput = new frmPermissionInput();
|
||||
|
||||
dlgInput.comboBoxRole.Items.Clear();
|
||||
foreach (var Entry in ValidRoles)
|
||||
dlgInput.comboBoxRole.Items.Add(Entry);
|
||||
|
||||
var Retval = dlgInput.ShowDialog();
|
||||
if (Retval != DialogResult.OK)
|
||||
return;
|
||||
|
||||
var User = dlgInput.textBoxEmail.Text.Trim();
|
||||
|
||||
eLiamAccessRoles Role;
|
||||
switch (dlgInput.comboBoxRole.SelectedIndex)
|
||||
{
|
||||
case 0:
|
||||
Role = eLiamAccessRoles.Read;
|
||||
break;
|
||||
case 1:
|
||||
Role = eLiamAccessRoles.Write;
|
||||
break;
|
||||
case 2:
|
||||
Role = eLiamAccessRoles.Owner;
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
||||
Cursor = Cursors.WaitCursor;
|
||||
treeViewTeams.Enabled = false;
|
||||
|
||||
await tn.AddPermission(Role, User);
|
||||
var LastMessage = tn.getLastError();
|
||||
await Task.Delay(100);
|
||||
await UpdateNode(treeViewTeams.SelectedNode, true);
|
||||
if (!string.IsNullOrEmpty(LastMessage))
|
||||
ShowErrorMessage(LastMessage);
|
||||
}
|
||||
catch (Exception E)
|
||||
{
|
||||
cLogManager.LogException(E);
|
||||
}
|
||||
finally
|
||||
{
|
||||
treeViewTeams.Enabled = true;
|
||||
Cursor = Cursors.Default;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private async void toolStripMenuItemRemovePermission_Click(object sender, EventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (treeViewTeams.SelectedNode == null)
|
||||
return;
|
||||
|
||||
if (!(treeViewTeams.SelectedNode.Tag is TreeNodeBase tn))
|
||||
return;
|
||||
|
||||
if (tn.SupportPermissionRemoveDirect())
|
||||
{
|
||||
Cursor = Cursors.WaitCursor;
|
||||
treeViewTeams.Enabled = false;
|
||||
|
||||
await tn.RemovePermissionDirect();
|
||||
var LastMessage2 = tn.getLastError();
|
||||
await Task.Delay(100);
|
||||
await UpdateNode(treeViewTeams.SelectedNode.Parent, true);
|
||||
if (!string.IsNullOrEmpty(LastMessage2))
|
||||
ShowErrorMessage(LastMessage2);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!tn.SupportPermissionRemoveByValue())
|
||||
return;
|
||||
|
||||
var ValidRoles = tn.ValidPermissionRoles();
|
||||
if (ValidRoles == null || ValidRoles.Count == 0)
|
||||
return;
|
||||
|
||||
var dlgInput = new frmPermissionInput();
|
||||
|
||||
dlgInput.comboBoxRole.Items.Clear();
|
||||
foreach (var Entry in ValidRoles)
|
||||
dlgInput.comboBoxRole.Items.Add(Entry);
|
||||
|
||||
var Retval = dlgInput.ShowDialog();
|
||||
if (Retval != DialogResult.OK)
|
||||
return;
|
||||
|
||||
var User = dlgInput.textBoxEmail.Text.Trim();
|
||||
|
||||
eLiamAccessRoles Role;
|
||||
switch (dlgInput.comboBoxRole.SelectedIndex)
|
||||
{
|
||||
case 0:
|
||||
Role = eLiamAccessRoles.Read;
|
||||
break;
|
||||
case 1:
|
||||
Role = eLiamAccessRoles.Write;
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
Cursor = Cursors.WaitCursor;
|
||||
treeViewTeams.Enabled = false;
|
||||
|
||||
await tn.RemovePermissionByValue(Role, User);
|
||||
var LastMessage = tn.getLastError();
|
||||
await Task.Delay(100);
|
||||
await UpdateNode(treeViewTeams.SelectedNode, true);
|
||||
if (!string.IsNullOrEmpty(LastMessage))
|
||||
ShowErrorMessage(LastMessage);
|
||||
return;
|
||||
}
|
||||
catch (Exception E)
|
||||
{
|
||||
cLogManager.LogException(E);
|
||||
}
|
||||
finally
|
||||
{
|
||||
treeViewTeams.Enabled = true;
|
||||
Cursor = Cursors.Default;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void ShowErrorMessage(string Message)
|
||||
{
|
||||
Invoke(new MethodInvoker(() => {
|
||||
if (string.IsNullOrWhiteSpace(Message))
|
||||
{
|
||||
textBoxErrorMessage.Text = "";
|
||||
textBoxErrorMessage.Visible = false;
|
||||
textBoxDetails.Height = textBoxErrorMessage.Bottom - textBoxDetails.Top;
|
||||
}
|
||||
else
|
||||
{
|
||||
textBoxErrorMessage.Text = Message;
|
||||
textBoxErrorMessage.Visible = true;
|
||||
textBoxDetails.Height = textBoxErrorMessage.Top - textBoxDetails.Top - 1;
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
private async void toolStripMenuItemLoadFromUID_Click(object sender, EventArgs e)
|
||||
{
|
||||
var CM = MethodBase.GetCurrentMethod();
|
||||
LogMethodBegin(CM);
|
||||
try
|
||||
{
|
||||
if (treeViewTeams.SelectedNode == null)
|
||||
return;
|
||||
|
||||
if (!(treeViewTeams.SelectedNode.Tag is TreeNodeBase tn))
|
||||
return;
|
||||
|
||||
var myUID = tn.GetUID();
|
||||
if (myUID != null)
|
||||
{
|
||||
var N = await tn.LoadFromUID();
|
||||
if (N != null && N.GetUID() == myUID)
|
||||
{
|
||||
var IT = N.GetInfoText();
|
||||
|
||||
var childs = await N.ResolveAsync(true);
|
||||
if (childs != null)
|
||||
IT += $"\r\n\r\nchild count: {childs.Count}";
|
||||
else
|
||||
IT += $"\r\n\r\n*** Error resolving child nodes ***";
|
||||
|
||||
MessageBox.Show(this, IT, $"Result for '{N.ToString()}'", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
MessageBox.Show(this, "Error loading node from UID", $"UID = {myUID}", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
|
||||
}
|
||||
catch (Exception E)
|
||||
{
|
||||
LogException(E);
|
||||
}
|
||||
finally
|
||||
{
|
||||
LogMethodEnd(CM);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
519
LiamTestTeams/ctrlTabLiam.resx
Normal file
519
LiamTestTeams/ctrlTabLiam.resx
Normal file
@@ -0,0 +1,519 @@
|
||||
<?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>
|
||||
<metadata name="contextMenuStripTreeNode.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>127, 17</value>
|
||||
</metadata>
|
||||
<metadata name="imageList1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
<data name="imageList1.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>
|
||||
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
|
||||
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
|
||||
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABi
|
||||
WgAAAk1TRnQBSQFMAgEBCQEAAYABAAGAAQABIAEAASABAAT/ARkBAAj/AUIBTQE2BwABNgMAASgDAAGA
|
||||
AwABYAMAAQEBAAEYBgABkP8AsQAD/QHmAeUB4gG+AboBsgGVAY4BgAF3AW8BWwFlAVsBRQFlAVsBRQF3
|
||||
AW8BWwGVAY4BgAG+AboBsgHmAeUB4gP9/wBXAAP7AcoBxgHBAXUBbAFZAWQBWgFEAWQBWgFEAWQBWgFE
|
||||
AWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAXUBbAFaAcoBxgHBA/v/AE4A
|
||||
Ad8B3gHaAXcBbwFbAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFE
|
||||
AWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAXcBbwFbAeAB3gHb/wBFAAP+AboBtgGu
|
||||
AWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFE
|
||||
AWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAboBtgGuA/7/ADwA
|
||||
A/4BsgGsAaEBZAFaAUQBZAFaAUQBZAFaAUQBZAFaAUQBZAFaAUQBZAFaAUQBZAFaAUQBZAFaAUQBZAFa
|
||||
AUQBZAFaAUQBZAFaAUQBZAFaAUQBZAFaAUQBZAFaAUQBZAFaAUQBZAFaAUQBZAFaAUQBZAFaAUQBZAFa
|
||||
AUQBZAFaAUQBrAGoAZ0D/v8AOQABxQHBAbgBegFuAVQBbwFkAUwBZAFaAUQBZAFaAUQBZAFaAUQBZAFa
|
||||
AUQBZAFaAUQBZAFaAUQBZAFaAUQBeAFvAVwBoQGbAY0BmgGTAYQBawFhAUwBZAFaAUQBZAFaAUQBZAFa
|
||||
AUQBZAFaAUQBZAFaAUQBZAFaAUQBZAFaAUQBZAFaAUQBZAFaAUQBugG2Aa7/ADYAAeUB5AHhAXoBbgFU
|
||||
AXoBbgFUAXoBbgFUAW8BZAFMAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAX0BdQFjAekB5wHk
|
||||
Ae8B7QHrAe8B7QHrAdYB0wHNAWcBXQFIAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFE
|
||||
AWQBWgFEAWQBWgFEAWQBWgFEAeAB3gHb/wAwAAP8AYwBggFsAXoBbgFUAXoBbgFUAXoBbgFUAXoBbgFU
|
||||
AW8BZAFMAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAasBpQGZAe8B7QHrAe8B7QHrAe8B7QHrAe8B7QHr
|
||||
AYIBeQFoAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFE
|
||||
AXcBbwFbA/v/AC0AAdIBzwHIAXoBbgFUAXoBbgFUAXoBbgFUAXoBbgFUAXoBbgFUAXoBbgFUAW8BZAFM
|
||||
AWQBWgFEAWQBWgFEAWQBWgFEAZUBjgF/Ae8B7QHrAe8B7QHrAe8B7QHrAeoB6AHlAXABZwFTAWQBWgFE
|
||||
AWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAcoBxgHB
|
||||
/wAqAAP+AYsBgQFrAXoBbgFUAXoBbgFUAXoBbgFUAXoBbgFUAXoBbgFUAXoBbgFUAXoBbgFUAW8BZAFM
|
||||
AWQBWgFEAWQBWgFEAWQBWgFEAaQBngGRAdMBzwHJAcwByAHBAYkBgQFxAWQBWgFEAWQBWgFEAWQBWgFE
|
||||
AWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAXUBbAFaA/3/ACcA
|
||||
AeoB6QHnAXoBbgFUAXoBbgFUAXoBbgFUAXoBbgFUAXoBbgFUAXoBbgFUAXoBbgFUAXoBbgFUAXoBbgFU
|
||||
AW8BZAFMAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFE
|
||||
AWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAeYB5QHi
|
||||
/wAnAAHIAcQBvAF6AW4BVAF6AW4BVAF6AW4BVAF6AW4BVAF6AW4BVAF6AW4BVAF6AW4BVAF6AW4BVAF6
|
||||
AW4BVAF6AW4BVAFvAWQBTAFkAVsBRQGlAZ8BkgGlAZ8BkgGlAZ8BkgGOAYcBdwFkAVoBRAFkAVoBRAFk
|
||||
AVoBRAFkAVoBRAFkAVoBRAFkAVoBRAFkAVoBRAFkAVoBRAFkAVoBRAFkAVoBRAFkAVoBRAFkAVoBRAG+
|
||||
AboBsv8AJwABpwGfAY8BegFuAVQBegFuAVQBegFuAVQBegFuAVQBegFuAVQBegFuAVQBegFuAVQBegFu
|
||||
AVQBegFuAVQBegFuAVQBegFuAVQBbwFkAUwB7QHqAegB7wHtAesB7wHtAesBzAHIAcEBZAFaAUQBZAFa
|
||||
AUQBZAFaAUQBZAFaAUQBZAFaAUQBZAFaAUQBZAFaAUQBZAFaAUQBZAFaAUQBZAFaAUQBZAFaAUQBZAFa
|
||||
AUQBlQGOAYD/ACcAAYwBggFsAXoBbgFUAXoBbgFUAXoBbgFUAXoBbgFUAXoBbgFUAXoBbgFUAXoBbgFU
|
||||
AXoBbgFUAXoBbgFUAXoBbgFUAXoBbgFUAXoBbgFUAeMB4AHbAe8B7QHrAe8B7QHrAewB6QHnAXYBbQFa
|
||||
AWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFE
|
||||
AWQBWgFEAXcBbgFb/wAnAAF+AXIBWAF6AW4BVAF6AW4BVAF6AW4BVAF6AW4BVAF6AW4BVAF6AW4BVAF6
|
||||
AW4BVAF6AW4BVAF6AW4BVAF6AW4BVAF6AW4BVAF6AW4BVAHFAcABtQH3AfYB9QHvAe0B6wHvAe0B6wHX
|
||||
AdQBzwFyAWgBVAFkAVoBRAFkAVoBRAFkAVoBRAFkAVoBRAFkAVoBRAFkAVoBRAFkAVoBRAFkAVoBRAFk
|
||||
AVoBRAFkAVoBRAFlAVsBRf8AJwABfgFyAVgBegFuAVQBegFuAVQBegFuAVQBegFuAVQBegFuAVQBegFu
|
||||
AVQBegFuAVQBegFuAVQBegFuAVQBegFuAVQBegFuAVQBegFuAVQBhwF8AWQB8wHyAe8B9wH2AfUB7wHt
|
||||
AesB7wHtAesB3AHZAdQBdgFtAVkBZAFaAUQBZAFaAUQBZAFaAUQBZAFaAUQBZAFaAUQBZAFaAUQBZAFa
|
||||
AUQBZAFaAUQBZAFaAUQBZQFbAUX/ACcAAYwBggFsAXoBbgFUAXoBbgFUAXoBbgFUAXoBbgFUAXoBbgFU
|
||||
AXoBbgFUAXoBbgFUAXoBbgFUAXoBbgFUAXoBbgFUAXoBbgFUAXoBbgFUAXoBbgFUAZABhgFwAfAB7gHr
|
||||
AfcB9gH1Ae8B7QHrAe8B7QHrAdwB2QHUAW0BZAFPAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFE
|
||||
AWQBWgFEAWQBWgFEAWQBWgFEAXcBbgFb/wAnAAGnAZ8BjwF6AW4BVAF6AW4BVAF6AW4BVAF6AW4BVAF6
|
||||
AW4BVAF6AW4BVAF6AW4BVAF6AW4BVAF6AW4BVAF6AW4BVAF6AW4BVAF6AW4BVAF6AW4BVAF6AW4BVAGM
|
||||
AYEBawH0AfMB8QH3AfYB9QHvAe0B6wHvAe0B6wGzAa4BowFkAVoBRAFkAVoBRAFkAVoBRAFkAVoBRAFk
|
||||
AVoBRAFkAVoBRAFkAVoBRAFkAVoBRAGVAY4BgP8AJwAByAHEAbwBegFuAVQBegFuAVQBegFuAVQBegFu
|
||||
AVQBegFuAVQBegFuAVQBegFuAVQBegFuAVQBegFuAVQBegFuAVQBegFuAVQBegFuAVQBegFuAVQBegFu
|
||||
AVQBegFuAVQBtQGvAaAD/wH3AfYB9QHvAe0B6wHiAd8B2wFkAVoBRAFkAVoBRAFkAVoBRAFkAVoBRAFk
|
||||
AVoBRAFkAVoBRAFkAVoBRAFkAVoBRAG+AboBsv8AJwAB6gHpAecBegFuAVQBegFuAVQBegFuAVQBegFu
|
||||
AVQBegFuAVQBegFuAVQBegFuAVQBegFuAVQB7wHtAeoB9AHzAfAB9AHzAfAB9AHzAfABpwGfAY4BegFu
|
||||
AVQBegFuAVQBpgGeAY0G/wH3AfYB9QHuAewB6gFkAVoBRAFkAVoBRAFkAVoBRAFkAVoBRAFkAVoBRAFk
|
||||
AVoBRAFkAVoBRAFkAVoBRAHmAeUB4v8AJwAD/gGMAYIBbAF6AW4BVAF6AW4BVAF6AW4BVAF6AW4BVAF6
|
||||
AW4BVAF6AW4BVAF6AW4BVAHoAeUB4Qn/Ad8B3AHWAX4BcwFaAXsBbwFVAdABzAHDCf8B6gHoAeUBZAFa
|
||||
AUQBZAFaAUQBZAFaAUQBZAFaAUQBZAFaAUQBZAFaAUQBZAFaAUQBdQFsAVoD/f8AKgAB0gHPAckBegFu
|
||||
AVQBegFuAVQBegFuAVQBegFuAVQBegFuAVQBegFuAVQBegFuAVQBuwG1AagM/wH2AfUB9AHzAfIB8Az/
|
||||
AcsBxwG9AW8BZAFMAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAWQBWgFEAcoBxgHB/wAtAAP8
|
||||
AYwBggFsAXoBbgFUAXoBbgFUAXoBbgFUAXoBbgFUAXoBbgFUAXoBbgFUAYABdQFcAegB5gHiGP8B9AHz
|
||||
AfEBiQF/AWgBegFuAVQBbwFkAUwBZAFaAUQBZAFaAUQBZAFaAUQBZAFaAUQBdwFvAVsD+/8AMAAB5QHk
|
||||
AeEBegFuAVQBegFuAVQBegFuAVQBegFuAVQBegFuAVQBegFuAVQBegFuAVQBhQF6AWIB0gHOAcUD/g//
|
||||
Ad4B2wHUAY4BhAFuAXoBbgFUAXoBbgFUAXoBbgFUAW8BZAFMAWQBWgFEAWQBWgFEAWQBWgFEAd8B3gHa
|
||||
/wA2AAHGAcIBuQF6AW4BVAF6AW4BVAF6AW4BVAF6AW4BVAF6AW4BVAF6AW4BVAF6AW4BVAF6AW4BVAGI
|
||||
AX0BZgGnAZ8BjQG1Aa4BoAG2Aa8BoQGqAaIBkQGNAYMBbAF6AW4BVAF6AW4BVAF6AW4BVAF6AW4BVAF6
|
||||
AW4BVAF6AW4BVAFvAWQBTAFkAVoBRAG6AbYBrv8AOQAD/gG4AbIBpgF6AW4BVAF6AW4BVAF6AW4BVAF6
|
||||
AW4BVAF6AW4BVAF6AW4BVAF6AW4BVAF6AW4BVAF6AW4BVAF6AW4BVAF6AW4BVAF6AW4BVAF6AW4BVAF6
|
||||
AW4BVAF6AW4BVAF6AW4BVAF6AW4BVAF6AW4BVAF6AW4BVAF6AW4BVAGyAawBoQP+/wA8AAP+AcYBwgG5
|
||||
AXoBbgFUAXoBbgFUAXoBbgFUAXoBbgFUAXoBbgFUAXoBbgFUAXoBbgFUAXoBbgFUAXoBbgFUAXoBbgFU
|
||||
AXoBbgFUAXoBbgFUAXoBbgFUAXoBbgFUAXoBbgFUAXoBbgFUAXoBbgFUAXoBbgFUAcYBwQG4A/7/AEUA
|
||||
AeUB5AHhAYwBggFsAXoBbgFUAXoBbgFUAXoBbgFUAXoBbgFUAXoBbgFUAXoBbgFUAXoBbgFUAXoBbgFU
|
||||
AXoBbgFUAXoBbgFUAXoBbgFUAXoBbgFUAXoBbgFUAXoBbgFUAYwBggFsAeUB5AHh/wBOAAP8AdIBzwHI
|
||||
AYwBggFsAXoBbgFUAXoBbgFUAXoBbgFUAXoBbgFUAXoBbgFUAXoBbgFUAXoBbgFUAXoBbgFUAXoBbgFU
|
||||
AXoBbgFUAYsBgQFrAdIBzwHIA/z/AFcAA/4B6gHpAecByAHEAbwBpwGfAY8BjAGCAWwBfQFyAVgBfQFy
|
||||
AVgBjAGCAWwBpwGfAY8ByAHEAbwB6gHpAecD/v8A/wD/ACEAA9rMAAP+AdwB3QHpA+oD/S0AA/8C4QHs
|
||||
AucB6AP8OQAD8gOOAw0YAANEA8YD/wkAA5szAAPyA44DDRgAA0QDxgP/NgAD8gOOAw0YAANEA8YD/wwA
|
||||
A/4BuQG9AeMBAgEXAc0BhAGKAcYD5wP9JwAD/wLRAegCBwG+AmkBvwLiAeMD/DYAA1UDAgNSGFsDKAMA
|
||||
A98JAANLA/0wAANVAwIDUhhbAygDAAPfNgADVQMCA1IYWwMoAwAD3wkAA/4BuQG+AeQBDAEiAdUBOgFF
|
||||
AfQBDAEfAdUBhAGKAcYD5wP9IQAD/wLRAegBBwEJAcQCAAHvAgABzgJpAb8C4gHjA/wwAAPvAwADpRsA
|
||||
A/sDBQN7CQADQAPcLQAD7wMAA6UbAAP7AwUDezMAA+8DAAOlGwAD+wMFA3sGAAP+AbkBvgHkAQ0BJQHW
|
||||
AUgBUgH4AU0BVQH+AUMBTAH6AQwBHwHVAYQBigHGA+cD/RsAA/8C0QHoAQgBCwHGAQMBBAHyAgAB/gIA
|
||||
AfsCAAHOAmkBvwLiAeMD/AwAA/4e+wPaAwADvB4AAw0DWwkAA0ADowwAA/4e+wPaAwADvB4AAw0DWxIA
|
||||
A/4e+wPaAwADvB4AAw0DWwMAA/4BuQG/AeQBDgEoAdcBTwFaAfkBVgFeAf4BUgFaAf4BTQFVAf4BQwFM
|
||||
AfoBDAEfAdUBhAGKAcYD5wP9FQAD/wLRAegBCAEOAccBCQELAfMCCAH+AQMBBAH+AgAB/gIAAfsCAAHO
|
||||
AmkBvwLiAeMD/AYAA/8DRiQAA7wMAAPDA/IMAAMNA1sJAANAA1AD/QkAA0YkAAO8DAADwwPyDAADDQNb
|
||||
EgADRiQAA7wMAAPDA/IMAAMNA1sDAAG+AcQB6AEPASsB2QFWAWIB+QFeAWcB/gFaAWMB/gFWAV4B/gFS
|
||||
AVoB/gFNAVUB/gFDAUwB+gEMAR8B1QGEAYoBxgPnA/0PAAP/AdEB0gHoAQkBEQHJARABEwHzARABEQH+
|
||||
AQwBDQH+AggB/gEDAQQB/gIAAf4CAAH7AgABzgJpAb8D6gYAA/0DAAMkG3IDVQMAA7wJAAP4AwADlgwA
|
||||
Aw0DWwkABkAD4AwAAyQbcgNVAwADvAkAA/gDAAOWDAADDQNbFQADJBtyA1UDAAO8CQAD+AMAA5YMAAMN
|
||||
A1sD/AEuAUkB2QE5AU0B6wFmAXAB/gFiAWwB/gFeAWcB/gFaAWMB/gFWAV4B/gFSAVoB/gFNAVUB/gFD
|
||||
AUwB+gEMAR8B1QGEAYoBxgPnA/0JAAP/AdEB0gHoAQkBFAHKARcBGwHzARgBGgH+ARQBFgH+ARABEQH+
|
||||
AQwBDQH+AggB/gEDAQQB/gIAAf4CAAHtAg8BwALrAfIGAAP9AwADchsAA+IDAAO8CQAD9gMAA5EMAAMN
|
||||
A1sJAAZAA6MMAANyGwAD4gMAA7wJAAP2AwADkQwAAw0DWxUAA3IbAAPiAwADvAkAA/YDAAORDAADDQNb
|
||||
AwAB8wH0AfgBLwFKAdkBQgFVAe8BZgFwAf4BYgFsAf4BXgFnAf4BWgFjAf4BVgFeAf4BUgFaAf4BTQFV
|
||||
Af4BQwFMAfoBDAEfAdUBhAGKAcYD5wP9AwAD/wHRAdMB6QEKARcBzAEdASMB8wEgASMB/gEcAR8B/gEY
|
||||
ARoB/gEUARYB/gEQAREB/gEMAQ0B/gIIAf4BAwEEAfABDwERAcUC3gHuCQAD/QMAA3IbAAPiAwADvAkA
|
||||
A/kDAAOaDAADDQNbCQAGQANSA/4JAANyGwAD4gMAA7wJAAP5AwADmgwAAw0DWxUAA3IbAAPiAwADvAkA
|
||||
A/kDAAOaDAADDQNbBgAB8wH0AfgBLwFKAdkBQgFVAe8BZgFwAf4BYgFsAf4BXgFnAf4BWgFjAf4BVgFe
|
||||
Af4BUgFaAf4BTQFVAf4BQwFMAfoBDAEfAdUBhAGKAcYD5wP8AdEB0wHpAQsBGQHNASQBKgH0ASkBLQH+
|
||||
ASQBKAH+ASABIwH+ARwBHwH+ARgBGgH+ARQBFgH+ARABEQH+AQkBCwHwAQ8BEwHGAd4B3wHuDAAD/QMA
|
||||
A3IbAAPiAwADvAwAA9QD9QwAAw0DWwkACUAD6QkAA3IbAAPiAwADvAwAA9QD9QwAAw0DWxUAA3IbAAPi
|
||||
AwADvAwAA9QD9QwAAw0DWwkAAfMB9AH4AS8BSgHZAUIBVQHvAWYBcAH+AWIBbAH+AV4BZwH+AVoBYwH+
|
||||
AVYBXgH+AVIBWgH+AU0BVQH+AUMBTAH6AQwBHwHVAYQBigHGAbMBtgHTAQsBHAHPASsBMgH0ATEBNgH+
|
||||
AS0BMQH+ASkBLQH+ASQBKAH+ASABIwH+ARwBHwH+ARgBGgH+AQ8BEwHxARABFgHIAd4B3wHuDwAD/QMA
|
||||
A3IbAAPvAwADmhsAA/gDBAN7CQAJQAOuCQADchsAA+8DAAOaGwAD+AMEA3sVAANyGwAD7wMAA5obAAP4
|
||||
AwQDewwAAfMB9AH4AS8BSgHZAUIBVQHvAWYBcAH+AWIBbAH+AV4BZwH+AVoBYwH+AVYBXgH+AVIBWgH+
|
||||
AU0BVQH+AUMBTAH6AQwBHwHVAQkBHAHPATEBOgH0ATkBPwH+ATUBOgH+ATEBNgH+AS0BMQH+ASkBLQH+
|
||||
ASQBKAH+ASABIwH+ARYBGgHxARABGAHKAd4B3wHuEgAD/QMAA3IbAAP/AywDFgPtFQAD/AOWAwADygkA
|
||||
CUADWgP+BgADchsAA/8DLAMWA+0VAAP8A5YDAAPKFQADchsAA/8DLAMWA+0VAAP8A5YDAAPKDwAB8wH0
|
||||
AfgBLwFKAdkBQgFVAe8BZgFwAf4BYgFsAf4BXgFnAf4BWgFjAf4BVgFeAf4BUgFaAf4BTQFVAf4BQwFM
|
||||
AfoBOQFCAfUBQQFIAf4BPQFDAf4BOQE/Af4BNQE6Af4BMQE2Af4BLQExAf4BKQEtAf4BHAEiAfEBEQEa
|
||||
AcsB3gHfAe8VAAP9AwADch4AA88DBQMAAz4SUAMWAwADVQP7CQAMQAPsBgADch4AA88DBQMAAz4SUAMW
|
||||
AwADVQP7FQADch4AA88DBQMAAz4SUAMWAwADVQP7EgAB8wH0AfgBLwFKAdkBQgFVAe8BZgFwAf4BYgFs
|
||||
Af4BXgFnAf4BWgFjAf4BVgFeAf4BUgFaAf4BTQFVAf4BSQFRAf4BRQFMAf4BQQFIAf4BPQFDAf4BOQE/
|
||||
Af4BNQE6Af4BMQE2Af4BIgEpAfIBEQEdAc0B3gHfAe8YAAP9AwADciEAA9kDAAMEDw0DCwMAA1kD/QwA
|
||||
DEADuAYAA3IhAAPZAwADBA8NAwsDAANZA/0YAANyIQAD2QMAAwQPDQMLAwADWQP9GAAB8wH0AfgBLwFK
|
||||
AdkBQgFVAe8BZgFwAf4BYgFsAf4BXgFnAf4BWgFjAf4BVgFeAf4BUgFaAf4BTQFVAf4BSQFRAf4BRQFM
|
||||
Af4BQQFIAf4BPQFDAf4BOQE/Af4BKQExAfIBEgEfAc4B3gHgAe8bAAP+AwADciEAA/YDAAORDwAD9gMA
|
||||
A5EPAAxAA2MGAANyIQAD9gMAA5EPAAP2AwADkRsAA3IhAAP2AwADkQ8AA/YDAAORHgAB8wH0AfgBLwFK
|
||||
AdkBQgFVAe8BZgFwAf4BYgFsAf4BXgFnAf4BWgFjAf4BVgFeAf4BUgFaAf4BTQFVAf4BSQFRAf4BRQFM
|
||||
Af4BQQFIAf4BLwE4AfIBEgEhAc8B3gHgAe8hAAMlAz4hAAP2AwADkQ8AA/YDAAORDwAPQAPsAyUDPiEA
|
||||
A/YDAAORDwAD9gMAA5EYAAMlAz4hAAP2AwADkQ8AA/YDAAORIQAB8wH0AfgBIwE/AdYBRAFWAe8BZgFw
|
||||
Af4BYgFsAf4BXgFnAf4BWgFjAf4BVgFeAf4BUgFaAf4BTQFVAf4BSQFRAf4BNwFBAfQBCAEcAc4BvQHA
|
||||
AdcD/SEAA2wDAAP3HgAD9gMAA5EPAAP2AwADkQ8AD0ADzQNsAwAD9x4AA/YDAAORDwAD9gMAA5EYAANs
|
||||
AwAD9x4AA/YDAAORDwAD9gMAA5EeAAP/AdEB1QHrARABLgHZAVoBaQH2AWoBdQH+AWYBcAH+AWIBbAH+
|
||||
AV4BZwH+AVoBYwH+AVYBXgH+AVIBWgH+AU0BVQH+AUMBTAH6AQwBHwHVAYUBjAHHA+cD/R4AA9gDAAN6
|
||||
HgADxwMAA1YPAAPgAwADqQ8AD0AD8QPYAwADeh4AA8cDAANWDwAD4AMAA6kYAAPYAwADeh4AA8cDAANW
|
||||
DwAD4AMAA6kbAAP/AdEB1gHrARABMAHaAWABcAH2AXIBfgH+AW4BeQH+AWoBdQH+AWYBcAH+AWIBbAH+
|
||||
AV4BZwH+AVoBYwH+AVYBXgH+AVIBWgH+AU0BVQH+AUMBTAH5AQwBHgHVAYUBjAHHA+cD/RsAA/8DYQMA
|
||||
A30D+RIAA/wDuwkAA+0MAAN1AwAD1w8ADEADbQMAA/8DYQMAA30D+RIAA/wDuwkAA+0MAAN1AwAD1xgA
|
||||
A/8DYQMAA30D+RIAA/wDuwkAA+0MAAN1AwAD1xgAA/8B0gHWAesBEwE1AdwBZgF4AfcBewGHAf4BdwGC
|
||||
Af4BcgF+Af4BbgF5Af4BagF1Af4BZgFwAf4BYgFsAf4BXgFnAf4BWgFjAf4BVgFeAf4BUgFaAf4BTQFV
|
||||
Af4BQwFLAfkBCwEeAdUBhgGNAccD5wP9GwAD/ANcAwADBQNJA3sJfANZAwcDAAM5A6EDAANSA90D/wP3
|
||||
A68DBANAA/0PAAxAA7gGAAP8A1wDAAMFA0kDewl8A1kDBwMAAzkDoQMAA1ID3QP/A/cDrwMEA0AD/RUA
|
||||
AQ4BfwEAAQ4BfwEAAQ4BfwEAA1wDAAMFA0kDewl8A1kDBwMAAzkDoQMAA1ID3QP/A/cDrwMEA0AD/RUA
|
||||
A/8B0wHYAewBEwE4Ad0BbQF/AfcBgwGQAf4BfwGLAf4BewGHAf4BdwGCAf4BcgF+Af4BbgF5Af4BagF1
|
||||
Af4BZgFwAf4BYgFsAf4BXgFnAf4BWgFjAf4BVgFeAf4BUgFaAf4BTQFVAf4BQwFLAfkBCwEeAdUBhgGN
|
||||
AccD5wP9GwAD/gPRAyIVAAOuA/0DAAO0BgADLAMFAwADJQPtEgAMQAPsCQAD/gPRAyIVAAOuA/0DAAO0
|
||||
BgADLAMFAwADJQPtGAABDgF/AQABDgF/AQABDgF/AQAD/gPRAyIVAAOuA/0DAAO0BgADLAMFAwADJQPt
|
||||
FQAD/wHTAdgB7AETAToB3wFzAYcB9wGLAZkB/gGHAZUB/gGDAZAB/gF/AYsB/gF7AYcB/gF3AYIB/gFy
|
||||
AX4B/gFYAWcB9QFGAVgB8AFmAXAB/gFiAWwB/gFeAWcB/gFaAWMB/gFWAV4B/gFSAVoB/gFNAVUB/gFD
|
||||
AUsB+QELAR4B1QGIAY4BxwPnA/0bAAPnAwUDDwO2A+sD8gPRAzkDAAOjCQAD2wOTAzIDSwOaA/kVAAlA
|
||||
A2MPAAPnAwUDDwO2A+sD8gPRAzkDAAOjCQAD2wOTAzIDSwOaA/kbAAEOAX8BAAEOAX8BAAEOAX8EAAPn
|
||||
AwUDDwO2A+sD8gPRAzkDAAOjCQAD2wOTAzIDSwOaA/kVAAP/AdQB2QHsARQBPQHgAXkBjgH3AZMBogH+
|
||||
AY8BngH+AYsBmQH+AYcBlQH+AYMBkAH+AX8BiwH+AXsBhwH+AV4BbwH2ARIBMQHZASQBPwHYAUUBVwHw
|
||||
AWYBcAH+AWIBbAH+AV4BZwH+AVoBYwH+AVYBXgH+AVIBWgH+AU0BVQH+AUIBSwH5AQsBHgHUAYgBjgHH
|
||||
A+cD/RUAA/sDLAMPA+8MAAP8A1MDAAPhLQAJQAO1DAAD+wMsAw8D7wwAA/wDUwMAA+EzAAEOAX8BAAEO
|
||||
AX8BAAEOAX8BAAP7AywDDwPvDAAD/ANTAwAD4SoAA/8B1QHaAewBFAE/AeIBgAGWAfgBnAGrAf4BmAGn
|
||||
Af4BkwGiAf4BjwGeAf4BiwGZAf4BhwGVAf4BgwGQAf4BZAF2AfYBEwEzAtoB3QHvAfEB8gH3ASgBQwHa
|
||||
AUUBVwHwAWYBcAH+AWIBbAH+AV4BZwH+AVoBYwH+AVYBXgH+AVIBWgH+AU0BVQH+AUIBSwH5AQsBHgHU
|
||||
AYkBkAHHA+gD/RIAA9oDAAO2EgAD8AMAA40tAAlAA+kMAAPaAwADthIAA/ADAAONMwABDgF/AQABDgF/
|
||||
AQABDgF/AQAD2gMAA7YSAAPwAwADjScAA/8B1QHaAe0BFAFCAeMBhgGdAfgBpAG0Af4BoAGwAf4BnAGr
|
||||
Af4BmAGnAf4BkwGiAf4BjwGeAf4BiwGZAf4BawF+AfcBFAE2AdwB2gHeAe8GAAHyAfMB+AEoAUMB2gFF
|
||||
AVcB8AFmAXAB/gFiAWwB/gFeAWcB/gFaAWMB/gFWAV4B/gFSAVoB/gFNAVUB/gFCAUsB+QELAR4B1AGK
|
||||
AZABxwPoA/0PAAOoAwAD7RUAAy8DPi0ABkADWgP+DAADqAMAA+0VAAMvAz4kAAEOAX8BAAEOAX8BAAEO
|
||||
AX8BAAEOAX8BAAEOAX8BAAEOAX8BAAEOAX8BAAEOAX8BAAEOAX8BAAEOAX8BAAEOAX8BAAEOAX8BAAEO
|
||||
AX8QAAMvAz4nAAHZAd4B7wEVAUQB5QGMAaQB+AGsAb0B/gGoAbkB/gGkAbQB/gGgAbAB/gGcAasB/gGY
|
||||
AacB/gGTAaIB/gFyAYYB9wEUATkB3QHaAd4B7wwAAfIB8wH4ASgBQwHaAUUBVwHwAWYBcAH+AWIBbAH+
|
||||
AV4BZwH+AVoBYwH+AVYBXgH+AVIBWgH+AU0BVQH+AUIBSwH5AQsBHgHUAYoBkAHHA+wPAAOVAwAD9RUA
|
||||
A0kDIi0ABkADrg8AA5UDAAP1FQADSQMiJAABDgF/AQABDgF/AQABDgF/AQABDgF/AQABDgF/AQABDgF/
|
||||
AQABDgF/AQABDgF/AQABDgF/AQABDgF/AQABDgF/AQABDgF/AQABDgF/EAADSQMiJAAC/AH9ASABTgHl
|
||||
AWgBiQHzAbQBxgH+AbABwgH+AawBvQH+AagBuQH+AaQBtAH+AaABsAH+AZwBqwH+AXgBjQH3ARUBPAHf
|
||||
AdoB3gHvEgAB8gHzAfgBKAFDAdoBRQFXAfABZgFwAf4BYgFsAf4BXgFnAf4BWgFjAf4BVgFeAf4BUgFa
|
||||
Af4BTQFVAf4BOAFDAfIBAgEXAc0B5gHnAe8PAAPJAwAD0xIAA/sDBANwLQAGQAPnDwADyQMAA9MSAAP7
|
||||
AwQDcCQAAQ4BfwEAAQ4BfwEAAQ4BfwEAAQ4BfwEAAQ4BfwEAAQ4BfwEAAQ4BfwEAAQ4BfwEAAQ4BfwEA
|
||||
AQ4BfwEAAQ4BfwEAAQ4BfwEAAQ4Bfw0AA/sDBANwJwAB5wHqAfUBGwFLAeYBiAGjAfgBtAHGAf4BsAHC
|
||||
Af4BrAG9Af4BqAG5Af4BpAG0Af4BfwGVAfgBFQE+AeAB2gHeAfAYAAHyAfMB+AEoAUMB2gFFAVcB8AFm
|
||||
AXAB/gFiAWwB/gFeAWcB/gFaAWMB/gFWAV4B/gFHAVEB+AELASEB1AHGAcoB6QP/DwAD9AMHAzwD/Q8A
|
||||
A5sDAAPCLQADQANQA/0PAAP0AwcDPAP9DwADmwMAA8IzAAEOAX8BAAEOAX8BAAEOAX8BAAP0AwcDPAP9
|
||||
DwADmwMAA8IqAAHnAeoB9QEbAUsB5gGIAaMB+AG0AcYB/gGwAcIB/gGsAb0B/gGFAZwB+AEWAUEB4gHa
|
||||
Ad8B8B4AAfIB8wH4ASgBQwHaAUUBVwHwAWYBcAH+AWIBbAH+AV4BZwH+AU4BWQH4AQwBJAHVAcYBygHp
|
||||
A/8VAAO1AwADXAPzBgAD/AOfAwADVgP+LQADQAOnFQADtQMAA1wD8wYAA/wDnwMAA1YD/jMAAQ4BfwEA
|
||||
AQ4BfwEAAQ4BfwQAA7UDAANcA/MGAAP8A58DAANWA/4tAAHnAeoB9QEbAUsB5gGIAaMB+AG0AcYB/gGM
|
||||
AaQB+AEWAUQB4wHaAd8B8CQAAfIB8wH4ASgBQwHaAUUBVwHwAWYBcAH+AVUBYQH4AQ0BJwHXAcYBygHp
|
||||
A/8YAAP+A5YGAAM2A0sDBwMAA1MD9TAAA0AD4xUAA/4DlgYAAzYDSwMHAwADUwP1NgABDgF/AQABDgF/
|
||||
AQABDgF/BAAD/gOWBgADNgNLAwcDAANTA/UzAAHnAeoB9QEbAUsB5gFoAYkB8wEXAUUB5QHaAd8B8CoA
|
||||
AfIB8wH4ASgBQwHaAToBTgHrAQ4BKgHYAcYBywHqA/8hAAPfA38DNwMgA2kDvAP+MwADSwP9GwAD3wN/
|
||||
AzcDIANpA7wD/jkAAQ4BfwEAAQ4BfwEAAQ4BfwoAA98DfwM3AyADaQO8A/45AAHnAeoB9QEgAU4B5QHc
|
||||
AeEB8TAAAfIB8wH4ASoBRQHZAccBzQHrA/9sAAObbAABDgF/AQABDgF/AQABDgF/WwAD/DYAA/z/AMAA
|
||||
Aa8BWAFVAa8BWAFVAa8BWAFV/wBmAAGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGv
|
||||
AVgBVQGvAVgBVQGvAVgBVTYAA+UDdwMmAygDewPoTgAD5QN3AyYDKAN7A+hUAAz/JP4M/xsAAa8BWAFV
|
||||
Aa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFV
|
||||
Aa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVMwADugMCAwUDUANPAwQDAgPBSAADugMCAwUDUANPAwQDAgPB
|
||||
PwAD/gP4A/ID7gPpA+YD4wneA9wD1RjUA9UD3AneA+QD5gPqA+8D8wP4A/4DAAGvAVgBVQGvAVgBVQGv
|
||||
AVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGv
|
||||
AVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVTAAA+UDAgNHA/MGAAPyA0ADBAPpQgAD5QMCA0cD8wYA
|
||||
A/IDQAMEA+k8AAP6A+ED0QPHAbABuQG+AakBtAG4AakBswG4AaMBrwGzAaABrAGyAaABrAGyAaABrAGy
|
||||
AZ8BrAGwAZ0BqwGvAZsBpwGtAZsBpwGtAZsBpwGtAZsBpwGtAZsBpwGtAZsBpwGtAZ8BqwGxAZ8BrAGw
|
||||
AaABrAGyAaABrAGyAaABrAGyAaQBsAG1AaoBswG4AasBtAG4AbIBuwG/A8cD0gPkA/wDAAGvAVgBVQGv
|
||||
AVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGv
|
||||
AVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGv
|
||||
AVgBVSEAA3gDBAPzDAAD8AMCA4MhAAP9A8cDjQOYA94D/w8AA3gDBAPzDAAD8AMCA4MhAAP9A8cDjQOY
|
||||
A94D/wkAA/8D/gHnAfAB9AEsAbIB5AEKAasB5wEKAasB5wEKAasB5wEKAasB5wEKAasB5wEKAasB5wEK
|
||||
AasB5wEKAasB5wEKAasB5wEKAasB5wEKAasB5wEKAasB5wEKAasB5wEKAasB5wEKAasB5wEKAasB5wEK
|
||||
AasB5wEKAasB5wEKAasB5wEKAasB5wEKAasB5wEKAasB5wEKAasB5wEKAasB5wEnAbEB5QHjAe8B8wP+
|
||||
BgABrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFY
|
||||
AVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBsAFZAVYBtQFlAWIBtgFm
|
||||
AWMBsQFcAVkBrwFYAVUBrwFYAVUBrwFYAVUbAAMqA08SAANCAzceAAP2Az4MAAOEA/4MAAMqA08SAANC
|
||||
AzceAAP2Az4MAAOEA/4MAAFLAb0B5QEPAasB5QEPAasB5QEPAasB5QEPAasB5QEPAasB5QEPAasB5QEP
|
||||
AasB5QEPAasB5QEPAasB5QEPAasB5QEPAasB5QEPAasB5QEPAasB5QEPAasB5QEPAasB5QEPAasB5QEP
|
||||
AasB5QEPAasB5QEPAasB5QEPAasB5QEPAasB5QEPAasB5QEPAasB5QEPAasB5QEPAasB5QEPAasB5QE5
|
||||
AbcB5gkAAa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFV
|
||||
Aa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVAfwC+Qf/Av4B4gHD
|
||||
AcIBsAFZAVYBrwFYAVUbAAMsA0sSAANAAzkeAANoAwADqQP2A+8DaAMAA8AMAAMsA0sSAANAAzkeAANo
|
||||
AwADqQP2A+8DaAMAA8AMAAESAa0B5gESAa0B5gESAa0B5gESAa0B5gESAa0B5gESAa0B5gESAa0B5gES
|
||||
Aa0B5gESAa0B5gESAa0B5gESAa0B5gESAa0B5gESAa0B5gESAa0B5gESAa0B5gESAa0B5gESAa0B5gES
|
||||
Aa0B5gESAa0B5gESAa0B5gESAa0B5gESAa0B5gESAa0B5gESAa0B5gESAa0B5gESAa0B5gESAa0B5gES
|
||||
Aa0B5gP+BgABrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFY
|
||||
AVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUP/wHiAcIBwQGv
|
||||
AVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVQwAA30DBAPxDAAD7QMAA4gbAAP2AwADdAkA
|
||||
A/wDFwNJDAADfQMEA/EMAAPtAwADiBsAA/YDAAN0CQAD/AMXA0kMAAEWAa0B5gEWAa0B5gEWAa0B5gEW
|
||||
Aa0B5gEWAa0B5gEWAa0B5gEWAa0B5gEWAa0B5gEWAa0B5gEWAa0B5gEWAa0B5gEWAa0B5gEWAa0B5gEW
|
||||
Aa0B5gEWAa0B5gEWAa0B5gEWAa0B5gEWAa0B5gEWAa0B5gEWAa0B5gEWAa0B5gEWAa0B5gEWAa0B5gEW
|
||||
Aa0B5gEWAa0B5gEWAa0B5gEWAa0B5gEWAa0B5gP+BgABrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFY
|
||||
AVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFY
|
||||
AVUBrwFYAVUBrwFYAVUP/wH+AvwBrwFYAVUB+QLzAfgC8AHpAdABzwG8AXMBcAGvAVgBVQGvAVgBVQkA
|
||||
A+kDBAM+A+8GAAPtAzcDBQPtGwAD6QMAA7EMAANQAxoMAAPpAwQDPgPvBgAD7QM3AwUD7RsAA+kDAAOx
|
||||
DAADUAMaDAABGwGvAecBGwGvAecBGwGvAecBGwGvAecBGwGvAecBGwGvAecBGwGvAecBGwGvAecBGwGv
|
||||
AecBGwGvAecBGwGvAecBGwGvAecBGwGvAecBGwGvAecBGwGvAecBGwGvAecBGwGvAecBGwGvAecBGwGv
|
||||
AecBGwGvAecBGwGvAecBGwGvAecBGwGvAecBGwGvAecBGwGvAecBGwGvAecBGwGvAecBGwGvAecD/gYA
|
||||
Aa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVAcMBgQF/AcMBgQF/
|
||||
Aa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVEv8BrwFYAVUB+gH1AfQJ/wHH
|
||||
AYoBiAGvAVgBVQwAA8QDBAMCA0ADPAYAA7seAAP4AwIDYQP/BgAD+AMPA1UPAAPEAwQDAgNAAzwGAAO7
|
||||
HgAD+AMCA2ED/wYAA/gDDwNVDAABHwGxAegBHwGxAegBHwGxAegBHwGxAegBHwGxAegBHwGxAegBHwGx
|
||||
AegBHwGxAegBHwGxAegBHwGxAegBHwGxAegBHwGxAegBHwGxAegBHwGxAegBHwGxAegBHwGxAegBHwGx
|
||||
AegBHwGxAegBHwGxAegBHwGxAegBHwGxAegBHwGxAegBHwGxAegBHwGxAegBHwGxAegBHwGxAegBHwGx
|
||||
AegBHwGxAegD/gYAAa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFV
|
||||
Bv8BrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUS/wGvAVgBVQH6AfUB9An/
|
||||
AfoC9AGvAVgBVQ8AA+sDhgM6AzwDEAMAA20D/x4AA4ADAAOGA+cD3ANKAwAD0BIAA+sDhgM6AzwDEAMA
|
||||
A20D/x4AA4ADAAOGA+cD3ANKAwAD0AwAASQBsQHpASQBsQHpASQBsQHpASQBsQHpASQBsQHpASQBsQHp
|
||||
ASQBsQHpASQBsQHpASQBsQHpASQBsQHpASQBsQHpASQBsQHpASQBsQHpASQBsQHpASQBsQHpASQBsQHp
|
||||
ASQBsQHpASQBsQHpASQBsQHpASQBsQHpASQBsQHpASQBsQHpASQBsQHpASQBsQHpASQBsQHpASQBsQHp
|
||||
ASQBsQHpASQBsQHpA/4GAAGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGv
|
||||
AVgBVQb/Aa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVEv8BrwFYAVUB+gH1
|
||||
AfQM/wGvAVgBVRsAA88GAAO/HgAD+wNGCQADAgOoIQADzwYAA78eAAP7A0YJAAMCA6gPAAEoAbIB6QEo
|
||||
AbIB6QEoAbIB6QEoAbIB6QEoAbIB6QEoAbIB6QEoAbIB6QEoAbIB6QEoAbIB6QEoAbIB6QEoAbIB6QEo
|
||||
AbIB6QEoAbIB6QEoAbIB6QEoAbIB6QEoAbIB6QEoAbIB6QEoAbIB6QEoAbIB6QEoAbIB6QEoAbIB6QEo
|
||||
AbIB6QEoAbIB6QEoAbIB6QEoAbIB6QEoAbIB6QEoAbIB6QEoAbIB6QP+BgABrwFYAVUBrwFYAVUBrwFY
|
||||
AVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUG/wGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGv
|
||||
AVgBVQGvAVgBVQGvAVgBVRL/Aa8BWAFVAfoB9QH0DP8BrwFYAVUeAAOGAwADCwPuGwAD/QMmAwADcwO6
|
||||
A/AnAAOGAwADCwPuGwAD/QMmAwADcwO6A/ASAAEsAbQB6gEsAbQB6gEsAbQB6gEsAbQB6gEsAbQB6gEs
|
||||
AbQB6gEsAbQB6gEsAbQB6gEsAbQB6gEsAbQB6gEsAbQB6gEsAbQB6gEsAbQB6gEsAbQB6gEsAbQB6gEs
|
||||
AbQB6gEsAbQB6gEsAbQB6gEsAbQB6gEsAbQB6gEsAbQB6gEsAbQB6gEsAbQB6gEsAbQB6gEsAbQB6gEs
|
||||
AbQB6gEsAbQB6gEsAbQB6gP+BgABrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFY
|
||||
AVUBrwFYAVUG/wGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVRL/Aa8BWAFV
|
||||
AfoB9QH0DP8BrwFYAVUeAAP8AzkDAANEA/0YAAPJAwADEAP6LQAD/AM5AwADRAP9GAADyQMAAxAD+hgA
|
||||
ATEBtgHrATEBtgHrATEBtgHrATEBtgHrATEBtgHrATEBtgHrATEBtgHrATEBtgHrATEBtgHrATEBtgHr
|
||||
ATEBtgHrATEBtgHrATEBtgHrATEBtgHrATEBtgHrATEBtgHrATEBtgHrATEBtgHrATEBtgHrATEBtgHr
|
||||
ATEBtgHrATEBtgHrATEBtgHrATEBtgHrATEBtgHrATEBtgHrATEBtgHrATEBtgHrA/4GAAGvAVgBVQGv
|
||||
AVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVQb/Aa8BWAFVAa8BWAFVAa8BWAFV
|
||||
Aa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVEv8BrwFYAVUB9QHrAeoB+gH1AfQB+gH1AfQB+gH1AfQB+gH1
|
||||
AfQBrwFYAVUhAAPrAwcDAAOYBgAD/gPqA9ADzQPlA/wDOgMAA58kAAz/A/4D6gMHAwADmAP+A/8D/gPp
|
||||
A88DzQPlA/wDOgMAA58bAAE3AbcB7AE1AbYB7AE1AbYB7AE1AbYB7AE1AbYB7AE1AbYB7AE1AbYB7AE1
|
||||
AbYB7AE1AbYB7AE1AbYB7AE1AbYB7AE1AbYB7AE1AbYB7AE1AbYB7AE1AbYB7AE1AbYB7AE1AbYB7AE1
|
||||
AbYB7AE1AbYB7AE1AbYB7AE1AbYB7AE1AbYB7AE1AbYB7AE1AbYB7AE1AbYB7AE1AbYB7AE1AbYB7AE1
|
||||
AbYB7AP+BgABrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUG/wGv
|
||||
AVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVQH6AfUB9AH6AfUB9AH6AfUB9AH6
|
||||
AfUB9AH6AfUB9AH6AfUB9AGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVSQA
|
||||
A7sGAAPaA8IDKgwAAw0DAAMHA/YVAAP9A/gD9APvA+0D6QPoA+cD4wbhA5AGAAOuA5kDIAwAAwsDAAMH
|
||||
A/YbAAFJAb8B7gFBAbsB7QE5AbgB7AE5AbgB7AE5AbgB7AE5AbgB7AE5AbgB7AE5AbgB7AE5AbgB7AE5
|
||||
AbgB7AE5AbgB7AE5AbgB7AE5AbgB7AE5AbgB7AE5AbgB7AE5AbgB7AE5AbgB7AE5AbgB7AE5AbgB7AE5
|
||||
AbgB7AE5AbgB7AE5AbgB7AE5AbgB7AE5AbgB7AE5AbgB7AE5AbgB7AE5AbgB7AE5AbgB7AP+BgABrwFY
|
||||
AVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUG/wGvAVgBVQGvAVgBVQGv
|
||||
AVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGv
|
||||
AVgBVQGvAVgBVTYAA/8DawMAAwIDAAMvA7AD3APeA7wDRwMAAyYD+BUAA/gB4AHiAeMBswHIAc8BiwG1
|
||||
AcYBhAGxAcIBgQGuAcEBfAGsAb4BfAGsAb4BfAGrAb0BeQGpAbsBeAGoAbwBdwGnAboBIAEtATIJAAEN
|
||||
ARIBFAE9AVQBXQFaAXkBhgFfAX8BiwFNAWUBbgEjASgBKgMAAyYD+BsAAVwBwAHqAXoB1gH2AVkBxgHx
|
||||
AU0BwAHvAU0BwAHvAU0BwAHvAU0BwAHvAU0BwAHvAU0BwAHvAU0BwAHvAUYBvQHuATsBuAHsAT4BugHt
|
||||
AT4BugHtAT4BugHtAT4BugHtAT4BugHtAT4BugHtAT4BugHtAT4BugHtAT4BugHtAT4BugHtAT4BugHt
|
||||
AT4BugHtAT4BugHtAT4BugHtAT4BugHtAT4BugHtA/4GAAGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGv
|
||||
AVgBVQGvAVgBVQGvAVgBVQGvAVgBVQb/Aa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFV
|
||||
Aa8BWAFVFQABrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUqAAP4Aw8DAAOUA/0MAAP+A7oDAgNQ
|
||||
A/4SAAP/AeMB7wH0AUgBvAHmAQ0BqwHmAQ0BqwHmAQwBqwHmAQ0BqwHmAQwBqwHmAQ0BqwHmAQ0BqwHm
|
||||
AQwBqwHmAQ0BqwHmAQsBmQHOAQABBQEHAwABBAFBAVgBDAGkAdwBDAGrAeYBDQGrAeYBDQGrAeYBDAGr
|
||||
AeYBQQG4AeMBkAGeAaQDAgNQA/4YAAFSAaIB1wE+AbYB6wFlAcwB8wFuAdEB9QFuAdEB9QFuAdEB9QFu
|
||||
AdEB9QFuAdEB9QFuAdEB9QFuAdEB9QF2AdQB9gGDAdoB+AFeAcgB8gFBAbkB7gFCAboB7gFCAboB7gFC
|
||||
AboB7gFCAboB7gFCAboB7gFCAboB7gFCAboB7gFCAboB7gFCAboB7gFCAboB7gFCAboB7gFCAboB7gFC
|
||||
AboB7gFCAboB7gP+BgABrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUB6wHVAdQB6wHVAdQB6wHV
|
||||
AdQG/wHXAasBqgHXAasBqgHXAasBqgGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVQMAAa8BWAFVAa8BWAFV
|
||||
Aa8BWAFVBgABrwFYAVUBvAF0AXEB7QHaAdkB/QL7AesB1QHUAboBbgFsAa8BWAFVJwAD3wMAA4MD/xUA
|
||||
A7IDAAO9FQABvAHhAe4BFQGvAeYBEQGtAeYBEQGtAeYBEQGtAeYBEQGsAeYBEQGtAeYBEQGtAeYBEQGs
|
||||
AeYBEQGtAeYBEQGtAeYBCwF5AaEDAAEFATgBSwEQAawB5QERAa0B5gERAawB5gERAa0B5gERAa0B5gER
|
||||
AawB5gEVAa8B5gG6AeAB7gOyAwADvRgAAUgBlwHUAQsBeAHKARIBgQHPARMBggHQARMBggHQARMBggHQ
|
||||
ARMBggHQARMBggHQARMBggHQARMBggHQARoBigHUAS8BpAHiAWcBzAH0AWcBzAHzAUcBvAHuAUcBvAHu
|
||||
AUcBvAHuAUcBvAHuAUcBvAHuAUcBvAHuAUcBvAHuAUcBvAHuAUcBvAHuAUcBvAHuAUcBvAHuAUcBvAHu
|
||||
AUcBvAHuAUcBvAHuA/4GAAGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVRj/Aa8BWAFVAa8BWAFV
|
||||
Aa8BWAFVAa8BWAFVAa8BWAFVAbQBYgFfAcIBfwF9AbYBZgFjAa8BWAFVAa8BWAFVAa8BWAFVAfIB5QHk
|
||||
Cf8B7QLaAa8BWAFVJwADcgMLA/gYAAP+AzADMgP/EgABugHgAe4BFwGuAeYBFwGtAeYBFwGuAeYBFwGu
|
||||
AeYBFwGuAeYBFwGuAeYBFwGuAeYBFwGuAeYBFwGuAeYBFwGuAeYBBgEwAUABAAEEAQUBFAGcAc4BFwGu
|
||||
AeYBFwGuAeYBFwGuAeYBFwGuAeYBFwGuAeYBFwGuAeYBFwGuAeYBuQHfAe0D/gMwAzID/xUAAUwBnAHZ
|
||||
AREBfwHSAREBgAHSAREBgAHSAREBgAHSAREBgAHSAREBgAHSAREBgAHSAREBgAHSAREBgAHSAREBgAHS
|
||||
ARABfgHRAR4BjgHZAWcBywHzAVYBwgHwAUsBvQHvAUsBvQHvAUsBvQHvAUsBvQHvAUsBvQHvAUsBvQHv
|
||||
AUsBvQHvAUsBvQHvAUsBvQHvAUsBvQHvAUsBvQHvAUsBvQHvAUsBvQHvA/4GAAGvAVgBVQGvAVgBVQGv
|
||||
AVgBVQGvAVgBVQGvAVgBVQG0AWIBYAHDAYIBgAHDAYIBgAHDAYIBgAHIAYwBigHXAawBqgHXAawBqgHX
|
||||
AawBqgGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVQHFAYYBhAH6AvUD/wH9AvoBzAGWAZQBrwFYAVUBtQFl
|
||||
AWIP/wGwAVsBWCQAA/4DEANtHgADogMAA/USAAG8AeEB7wEdAbAB5wEdAbAB6AEdAbAB5wEdAbAB6AEd
|
||||
AbAB5wEdAbAB6AEdAbAB5wEdAbAB5wEdAbAB6AEcAa0B5AEBAQYBCAEHAS4BPQEdAbAB5wEdAbAB6AEd
|
||||
AbAB5wEdAbAB5wEdAbAB6AEdAbAB5wEdAbAB5wEdAbAB6AG6AeAB7gMAA6IDAAP1FQABUQGiAd4BGAGI
|
||||
AdoBFAGGAdoBFAGGAdoBFAGGAdoBFAGGAdoBFAGGAdoBFAGGAdoBFAGGAdoBFAGGAdoBFAGGAdoBFAGG
|
||||
AdoBEwGFAdkBKQGbAeEBegHUAfYBTQG9Ae8BTwG/AfABTwG/AfABTwG/AfABTwG/AfABTwG/AfABTwG/
|
||||
AfABTwG/AfABTwG/AfABTwG/AfABTwG/AfABTwG/AfABTwG+AfAD/gYAAa8BWAFVAa8BWAFVAa8BWAFV
|
||||
Aa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFV
|
||||
Aa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVAfMB5wHmCf8B+wL3AbIBXQFaAbABWwFYAfkC8gn/AfUC6gGv
|
||||
AVgBVSQAA/oDAAObHgADxgMAA+cSAAG9AeEB7wEjAbEB6QEjAbEB6QEjAbEB6QEjAbEB6QEjAbEB6QEj
|
||||
AbEB6QEjAbEB6QEjAbEB6QEjAbEB6QEgAaIB1QMAAQ4BSAFfASMBsQHpASMBsQHpASMBsQHpASMBsQHp
|
||||
ASMBsQHpASMBsQHpASMBsQHpASMBsQHpAbwB4AHuAwADxgMAA+cVAAFuAbMB5QE9AZwB4wEVAYsB3wEX
|
||||
AYwB3wEXAYwB3wEXAYwB3wEXAYwB3wEXAYwB3wEXAYwB3wEXAYwB3wEXAYwB3wEXAYwB3wEXAYwB3wEV
|
||||
AYoB3wFGAbMB7QF2AdIB9gFTAb4B8QFUAb8B8QFUAb8B8QFUAb8B8QFUAb8B8QFUAb8B8QFUAb8B8QFU
|
||||
Ab8B8QFUAb8B8QFUAb8B8QFTAb8B8QFaAcMB8QP+BgABrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFY
|
||||
AVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFY
|
||||
AVUBrwFYAVUBrwFYAVUD/gz/AbgBawFoAa8BWAFVAcgBjAGKAfwC+AP/AfoC9AHFAYUBgwGvAVgBVSQA
|
||||
A/wDAAOOHgADvQMAA+wSAAG/AeEB7wEpAbMB6QEpAbMB6QEpAbMB6QEpAbMB6QEpAbMB6QEpAbIB6QEp
|
||||
AbMB6QEpAbMB6QEpAbIB6QEmAakB3QMAAQ4BQQFUASkBswHpASkBswHpASkBswHpASkBswHpASkBswHp
|
||||
ASkBswHpASkBswHpASkBswHpAb0B4QHuAwADvQMAA+wVAAHpAfAB9QE2AZ0B6AFPAagB6gFPAacB6QFP
|
||||
AacB6QFPAacB6QFPAacB6QFPAacB6QFPAacB6QFPAacB6QFPAacB6QFPAacB6QFPAacB6QFPAacB6QFT
|
||||
AaoB6gFoAckB8wGAAdcB9wFXAcAB8QFXAcAB8QFXAcEB8QFXAcEB8QFXAcEB8QFXAcEB8QFXAcEB8QFX
|
||||
AcEB8QFXAcAB8QFeAcQB8gFuAc0B9AP+BgABrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFY
|
||||
AVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFY
|
||||
AVUBrwFYAVUB6QHSAdEJ/wH0AucBrwFZAVYBrwFYAVUBrwFYAVUBswFhAV4BvwF6AXgBswFgAV0BrwFY
|
||||
AVUBrwFYAVUnAAM3AzwD/xsAA3gDBwP8EgABwAHiAe8BLgG1AeoBLwG1AesBLwG1AeoBLwG1AesBLgG1
|
||||
AeoBLwG1AesBLgG1AeoBLgG1AeoBLwG1AesBLgG1AeoBBQEWAR0BBgEYASABLgG0AekBLgG1AesBLgG1
|
||||
AeoBLwG1AeoBLgG1AesBLgG1AeoBLwG1AeoBLgG1AesBvgHhAe4DAAN4AwcD/BgAAfoB+wH8AeUB7gH0
|
||||
AeQB7gH0AeQB7gH1AeQB7gH1AeQB7gH1AeQB7gH1AeQB7gH1AeQB7gH1AeQB7gH1AeQB7gH1AeQB7gH1
|
||||
AeQB7gH1AeQB7gH1AdQB5wHyAWQBxgHzAYsB3AH5AYsB3AH4AYwB3AH5AYwB3AH5AYwB3AH5AYwB3AH5
|
||||
AYwB3AH5AYwB3AH5AYwB3AH5AYUB2AH4AXEBxwHvCQABrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFY
|
||||
AVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFY
|
||||
AVUBrwFYAVUBrwFYAVUBtwFpAWYB5wHOAc0B+wL2AewC1gG8AXMBcAGvAVgBVQYAAa8BWAFVAa8BWAFV
|
||||
Aa8BWAFVLQADpwMAA9wYAAPyAwcDdBUAAcIB4gHwATQBtgHsATQBtgHsATQBtgHsATQBtgHsATQBtgHs
|
||||
ATQBtgHsATQBtgHsATQBtgHsATQBtgHsATQBtgHsARcBUgFqAwABIwF8AaEBNAG2AewBNAG2AewBNAG2
|
||||
AewBNAG2AewBNAG2AewBNAG2AewBNAG2AewBwAHhAe8D8gMHA3RIAAHvAfQB9wGWAdIB8AFeAcIB8wFe
|
||||
AcIB8wFeAcIB8wFeAcIB8wFeAcIB8wFeAcIB8wFeAcIB8wFeAcIB8wFsAccB8wHpAfEB9QkAAa8BWAFV
|
||||
Aa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFV
|
||||
Aa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFV
|
||||
Aa8BWAFVPwAD+QMaAyYD9BIAA/sDSwMFA+wVAAHIAeQB7wFPAcEB7wFAAbsB7QE+AboB7QE+AboB7QE+
|
||||
AboB7QE+AboB7QE+AboB7QE8AbkB7AE6AbgB7AE6AbgB7AE0AaYB1AEDAQoBDQEFAQ8BFAExAZ0ByAE6
|
||||
AbgB7AE6AbkB7AE6AbkB7AE6AbgB7AE6AbkB7AE6AbkB7AG4AdgB5QNLAwUD7E4AAvsB/AHzAfcB+AHz
|
||||
AfcB+AHzAfcB+AHzAfcB+AHzAfcB+AHzAfcB+AH0AfcB+AP9DAABrwFYAVUBrwFYAVUBrwFYAVUBrwFY
|
||||
AVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFYAVUBrwFY
|
||||
AVUBrwFYAVUBrwFYAVUBrwFYAVVRAAPcAwcDIAPNA/4GAAP/A94DOgMAA70YAAHMAeIB7gFaAcAB7QFf
|
||||
AckB8gFeAckB8gFdAcgB8gFeAckB8gFdAckB8gFeAckB8gFeAckB8gFXAcUB8QFDAbsB7gFAAboB7gEr
|
||||
AX8BowEBAQIBAwEEAQ0BEAEmAXEBkAE+AbQB5wFAAboB7gFAAboB7gE/AbgB7AEsAYEBpQEiASkBLAMA
|
||||
A72BAAGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGv
|
||||
AVgBVQGvAVgBVQGvAVgBVQGvAVgBVQGvAVgBVVQAA+ADJQMAAxcDXQNiAyQDAAMSA8gbAAHJAd0B6wEk
|
||||
AYsB0wEoAZQB2AEqAZYB2QEqAZYB2QEqAZYB2QEqAZYB2QEqAZYB2QE2AaIB3wFUAb4B7QFfAcgB8gFG
|
||||
AbsB7gFGAbwB7gExAYQBqAEFAQ8BEwMAAQMBCQEMAQ8BKQE1ARABLAE4AQUBDgESAwABCgEMAQ0DyJYA
|
||||
Aa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVAa8BWAFVVwAD+wO+A2IDJQMi
|
||||
A1UDrwP4HgABygHeAe0BIAGHAdYBEgGCAdQBEgGCAdQBEgGCAdQBEgGCAdQBEgGCAdQBEgGCAdQBEgGB
|
||||
AdQBFgGGAdYBSAGyAekBWgHEAfEBTAG9Ae8BTAG+Ae8BRwGyAeABKQFmAYEBEQEsATgBBgEPARMBBQEO
|
||||
AREBDwEmAS8BJAFaAXIBtwHUAeGoAAGvAVgBVQGvAVgBVQGvAVgBVY0AAc8B4QHvATgBmAHgARUBiQHd
|
||||
ARYBiQHdARYBiQHcARYBiQHdARYBiQHdARYBiQHdARYBiQHdARUBiQHcARwBkAHfAWABxAHyAVkBwwHy
|
||||
AVEBvwHxAVIBvwHxAVIBvwHxAVEBvwHxAVIBvwHxAVIBvwHxAVEBvwHxAVIBvwHxAcgB5AHw/wA/AAHw
|
||||
AfQB9wFoAbIB5wFBAaEB5wFBAaAB5wFBAaAB5wFBAaAB5gFBAaAB5gFBAaAB5wFBAaAB5gFBAaAB5gFB
|
||||
AaAB5wFXAbQB7QFwAc4B9QFeAcQB8gFWAcAB8QFWAcEB8QFWAcAB8QFWAcEB8QFWAcEB8QFWAcAB8QFf
|
||||
AcUB8gHNAeYB8XsAAUIBTQE+BwABPgMAASgDAAGAAwABYAMAAQEBAAEBBgABBhYAA/8BAAT/DAAB/wHA
|
||||
AQMB/wwAAf8CAAH/DAAB/gIAAX8MAAH4AgABHwwAAfACAAEPDAAB8AIAAQ8MAAHgAgABBwwAAcACAAED
|
||||
DAABwAIAAQMMAAGAAgABAQwAAYACAAEBDAABgAIAAQEMAAGAAgABAQwAAYACAAEBDAABgAIAAQEMAAGA
|
||||
AgABAQwAAYACAAEBDAABgAIAAQEMAAGAAgABAQwAAYACAAEBDAABgAIAAQEMAAHAAgABAwwAAcACAAED
|
||||
DAAB4AIAAQcMAAHwAgABDwwAAfACAAEPDAAB+AIAAR8MAAH+AgABfwwAAf8CAAH/DAAB/wHAAQMB/wwA
|
||||
BP8MAAT/AX8H/wH4AX8B/wEPAf8B/gEAAQcBfwH/AcABAAL/AcABAAHwAT8B/gEHAf8B/gEAAQcBPwH/
|
||||
AcABAAL/AcABAAHgAR8B/AEDAf8B/AF/AccBPwH/AY8B+AL/AY8B+AHAAQ8B+AEBAeABAAF/AecBPAEA
|
||||
AQ8C/AEAAQ8B/AGAAQcB8AEAAcABAAF5AecBHAEAAQ8BPAH8AQABDwE8AYABAwHgAQABwAEAAXEB5wEc
|
||||
AQABDgE8AfwBAAEOATwBAAEBAcABAAHHAfwBcQHnARwB/wGOATwB/AH/AY4BPAGAAQABgAEBAccB/AFx
|
||||
AecBDAH/AY4BPAH8Af8BjgE8AcACAAEDAccB/AF5AecBDAH/AY8BPAH8Af8BjwE8AeACAAEHAccB/AF/
|
||||
AccBDAH/AY8B+AH8Af8BjwH4AfACAAEPAccB/AE/AYcBBAH/AYcB8AH8Af8BhwHwAfgCAAEfAccB/gEA
|
||||
AQcBBAH/AcABAAH8Af8BwAEAAfwCAAE/AccB/wEAAQ8BBAH/AeABAQH8Af8B4AEBAf4CAAF/AccB/wIf
|
||||
AQQB/wLjAfwB/wLjAf8CAAH/AecB/wIfAQAB/wLjAfwB/wLjAf8BgAEAAf8B4wH/Ah8BAAF/AuMB/AF/
|
||||
AuMB/wIAAX8B4wH/Ah8BAAF/AuMB/AF/AuMB/gIAAT8B4AH8AQ8BHwEEAR8BgQHjAfwBHwGBAeMB/AIA
|
||||
AR8B8AIAAR8BBgIAAQMB+AIAAQMB+AIAAQ8B+AEAAUABPwEHAQABCAEHAfgBAAEIAQcB8AIAAQcB/AEA
|
||||
AeABfwEPAYABHAEPAfgBgAEcAQ8B4AIAAQMB+AF4AX8B/wMPAf8B+AIPAf8BwAIAAQEB+AH8AX8B/wEP
|
||||
AR8BjwH/AfgBHwGPAf8BgAEBAYABAAH4Af4BfwH/AQ8BHwHPAf8BAAEHAc8B/wGAAQMBwAEAAfgB/gF/
|
||||
Af8CHwHPAf8BAAEHAc8B/wEAAQcB4AEAAfgB/AF/Af8CHwGPAf8BAAEHAY8B/wGAAQ8B8AEAAfgBfAF/
|
||||
Af8BHwEPAY8B/wH4AQ8BjwH/AcABHwH4AQEB/AEwAX8B/wE/AYYBDwH/AfgBhgEPAf8B4AE/AfwBAwH8
|
||||
AQAC/wE/AYABHwH/AfgBgAEfAf8B8AF/Af4BBwH/AQEC/wE/AeABPwH/AfgB4AE/Af8B+AL/AQ8E/wF/
|
||||
A/8B+AP/Af0C/wG/Ef8B/gE/Dv8BgAE/Af8B8AE/Av8B8AE/Av8B/AIAAT8B4AEAAT8B/wHgAR8C/wHg
|
||||
AR8C/wQAAYABAAE/Af8BwwEPAv8BwwEPAv8EAAGAAQABAQH/AccBjwH+AQcBxwGPAf4BBwMAAQEBgAIA
|
||||
AX8CzwH8AQMCzwH8AQMBwAIAAQMBgAIAAX8CzwH8AQMCzwH8AQMBwAIAAQEBgAIAAQMBxwGPAfgB4wHH
|
||||
AY8B+AHjAcACAAEBAYACAAEBAcMBDwH4AfMBwwEPAfgB8wHAAgABAQGAAgABAQHgAR8B+AFjAeABHwH4
|
||||
AWMBwAIAAQEBgAIAAQEB8AEPAfwBAwHwAQ8B/AEDAcACAAEBAYACAAEBAf8BDwH8AQcB/wEPAfwBBwHA
|
||||
AgABAQGAAgABAQH/AYcB/AEPAf8BhwH8AQ8BwAIAAQEBgAIAAQEB/wGDAfwBPwH/AYMB/AE/AcACAAEB
|
||||
AYACAAEBAf8BwwEAAX8B+AIAAX8BwAIAAQEBgAIAAQEB/wHgAQABfwMAAX8BwAIAAQEBgAIAAX8B/wHg
|
||||
AQABfwMAAX8BwAIAAQEBgAEAAT8BgwH/AfABeAE/AwABPwHAAgABAQGAAQABIwEBAf8B8AH+AT8BgAIA
|
||||
AT8BwAIAAQEBgAIAAQEB/wHxAf4BHwGAAgABHwHAAgABAQGAAgABAQH/AeMB/wEfAYABAAEBAR8BwAIA
|
||||
AQEBgAIAAQEB/wHjAf8BHwGAAQABAQEfAcACAAEBAYACAAEBAf8B4wH/AR8BgAEAAQEBHwHAAgABAQGA
|
||||
AgABAQH/AfEB/wEfAYABAAEBAR8B4AIAAQMBgAIAAccB/wHxAf4BPwGAAgABPwL/AcABAwGAAQABAQL/
|
||||
AfAB/AE/AYACAAE/Av8B8AEHAYABAAE/Av8B+AEwAX8BgAIAAX8E/wHwAQABPwL/AfwBAAH/AYACAAb/
|
||||
AcABPwL/Af4BAQH/AYABAAEBBv8B/gE/Bf8BgAEAAQEN/wGAAQABAQX/Cw==
|
||||
</value>
|
||||
</data>
|
||||
</root>
|
||||
325
LiamTestTeams/frmMain.Designer.cs
generated
Normal file
325
LiamTestTeams/frmMain.Designer.cs
generated
Normal file
@@ -0,0 +1,325 @@
|
||||
|
||||
namespace LiamTestTeams
|
||||
{
|
||||
partial class frmMain
|
||||
{
|
||||
/// <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()
|
||||
{
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmMain));
|
||||
this.tabControlLiam = new System.Windows.Forms.TabControl();
|
||||
this.tabPageLogin = new System.Windows.Forms.TabPage();
|
||||
this.groupBox1 = new System.Windows.Forms.GroupBox();
|
||||
this.buttonLogin = new System.Windows.Forms.Button();
|
||||
this.textBoxClientSecret = new System.Windows.Forms.TextBox();
|
||||
this.label5 = new System.Windows.Forms.Label();
|
||||
this.textBoxClientApp = new System.Windows.Forms.TextBox();
|
||||
this.label4 = new System.Windows.Forms.Label();
|
||||
this.textBoxTenant = new System.Windows.Forms.TextBox();
|
||||
this.label3 = new System.Windows.Forms.Label();
|
||||
this.groupBoxAccount = new System.Windows.Forms.GroupBox();
|
||||
this.textBoxErrorMessage = new System.Windows.Forms.TextBox();
|
||||
this.labelError = new System.Windows.Forms.Label();
|
||||
this.textBoxDomain = new System.Windows.Forms.TextBox();
|
||||
this.textBoxDisplayName = new System.Windows.Forms.TextBox();
|
||||
this.label2 = new System.Windows.Forms.Label();
|
||||
this.label1 = new System.Windows.Forms.Label();
|
||||
this.tabPageTeams = new System.Windows.Forms.TabPage();
|
||||
this.ctrlTabTeams1 = new LiamTestTeams.ctrlTabLiam();
|
||||
this.tabPageLiam = new System.Windows.Forms.TabPage();
|
||||
this.ctrlTabLiam1 = new LiamTestTeams.ctrlTabLiam();
|
||||
this.tabControlLiam.SuspendLayout();
|
||||
this.tabPageLogin.SuspendLayout();
|
||||
this.groupBox1.SuspendLayout();
|
||||
this.groupBoxAccount.SuspendLayout();
|
||||
this.tabPageTeams.SuspendLayout();
|
||||
this.tabPageLiam.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// tabControlLiam
|
||||
//
|
||||
this.tabControlLiam.Controls.Add(this.tabPageLogin);
|
||||
this.tabControlLiam.Controls.Add(this.tabPageTeams);
|
||||
this.tabControlLiam.Controls.Add(this.tabPageLiam);
|
||||
this.tabControlLiam.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.tabControlLiam.Location = new System.Drawing.Point(0, 0);
|
||||
this.tabControlLiam.Name = "tabControlLiam";
|
||||
this.tabControlLiam.SelectedIndex = 0;
|
||||
this.tabControlLiam.Size = new System.Drawing.Size(880, 493);
|
||||
this.tabControlLiam.TabIndex = 0;
|
||||
//
|
||||
// tabPageLogin
|
||||
//
|
||||
this.tabPageLogin.Controls.Add(this.groupBox1);
|
||||
this.tabPageLogin.Controls.Add(this.groupBoxAccount);
|
||||
this.tabPageLogin.Location = new System.Drawing.Point(4, 22);
|
||||
this.tabPageLogin.Name = "tabPageLogin";
|
||||
this.tabPageLogin.Padding = new System.Windows.Forms.Padding(3);
|
||||
this.tabPageLogin.Size = new System.Drawing.Size(872, 467);
|
||||
this.tabPageLogin.TabIndex = 0;
|
||||
this.tabPageLogin.Text = "Login";
|
||||
this.tabPageLogin.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// groupBox1
|
||||
//
|
||||
this.groupBox1.Controls.Add(this.buttonLogin);
|
||||
this.groupBox1.Controls.Add(this.textBoxClientSecret);
|
||||
this.groupBox1.Controls.Add(this.label5);
|
||||
this.groupBox1.Controls.Add(this.textBoxClientApp);
|
||||
this.groupBox1.Controls.Add(this.label4);
|
||||
this.groupBox1.Controls.Add(this.textBoxTenant);
|
||||
this.groupBox1.Controls.Add(this.label3);
|
||||
this.groupBox1.Location = new System.Drawing.Point(8, 6);
|
||||
this.groupBox1.Name = "groupBox1";
|
||||
this.groupBox1.Size = new System.Drawing.Size(861, 111);
|
||||
this.groupBox1.TabIndex = 0;
|
||||
this.groupBox1.TabStop = false;
|
||||
this.groupBox1.Text = "Tenant and access properties";
|
||||
//
|
||||
// buttonLogin
|
||||
//
|
||||
this.buttonLogin.Enabled = false;
|
||||
this.buttonLogin.Location = new System.Drawing.Point(458, 22);
|
||||
this.buttonLogin.Name = "buttonLogin";
|
||||
this.buttonLogin.Size = new System.Drawing.Size(75, 23);
|
||||
this.buttonLogin.TabIndex = 6;
|
||||
this.buttonLogin.Text = "Login";
|
||||
this.buttonLogin.UseVisualStyleBackColor = true;
|
||||
this.buttonLogin.Click += new System.EventHandler(this.buttonLogin_Click);
|
||||
//
|
||||
// textBoxClientSecret
|
||||
//
|
||||
this.textBoxClientSecret.Location = new System.Drawing.Point(144, 76);
|
||||
this.textBoxClientSecret.Name = "textBoxClientSecret";
|
||||
this.textBoxClientSecret.Size = new System.Drawing.Size(308, 20);
|
||||
this.textBoxClientSecret.TabIndex = 2;
|
||||
this.textBoxClientSecret.TextChanged += new System.EventHandler(this.textBoxInput_TextChanged);
|
||||
//
|
||||
// label5
|
||||
//
|
||||
this.label5.AutoSize = true;
|
||||
this.label5.Location = new System.Drawing.Point(70, 79);
|
||||
this.label5.Name = "label5";
|
||||
this.label5.Size = new System.Drawing.Size(68, 13);
|
||||
this.label5.TabIndex = 5;
|
||||
this.label5.Text = "Client secret:";
|
||||
//
|
||||
// textBoxClientApp
|
||||
//
|
||||
this.textBoxClientApp.Location = new System.Drawing.Point(144, 50);
|
||||
this.textBoxClientApp.Name = "textBoxClientApp";
|
||||
this.textBoxClientApp.Size = new System.Drawing.Size(308, 20);
|
||||
this.textBoxClientApp.TabIndex = 1;
|
||||
this.textBoxClientApp.TextChanged += new System.EventHandler(this.textBoxInput_TextChanged);
|
||||
//
|
||||
// label4
|
||||
//
|
||||
this.label4.AutoSize = true;
|
||||
this.label4.Location = new System.Drawing.Point(31, 53);
|
||||
this.label4.Name = "label4";
|
||||
this.label4.Size = new System.Drawing.Size(107, 13);
|
||||
this.label4.TabIndex = 4;
|
||||
this.label4.Text = "Client app ID (GUID):";
|
||||
//
|
||||
// textBoxTenant
|
||||
//
|
||||
this.textBoxTenant.Location = new System.Drawing.Point(144, 24);
|
||||
this.textBoxTenant.Name = "textBoxTenant";
|
||||
this.textBoxTenant.Size = new System.Drawing.Size(308, 20);
|
||||
this.textBoxTenant.TabIndex = 0;
|
||||
this.textBoxTenant.TextChanged += new System.EventHandler(this.textBoxInput_TextChanged);
|
||||
//
|
||||
// label3
|
||||
//
|
||||
this.label3.AutoSize = true;
|
||||
this.label3.Location = new System.Drawing.Point(33, 27);
|
||||
this.label3.Name = "label3";
|
||||
this.label3.Size = new System.Drawing.Size(105, 13);
|
||||
this.label3.TabIndex = 3;
|
||||
this.label3.Text = "Tenant (DNS name):";
|
||||
//
|
||||
// groupBoxAccount
|
||||
//
|
||||
this.groupBoxAccount.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.groupBoxAccount.Controls.Add(this.textBoxErrorMessage);
|
||||
this.groupBoxAccount.Controls.Add(this.labelError);
|
||||
this.groupBoxAccount.Controls.Add(this.textBoxDomain);
|
||||
this.groupBoxAccount.Controls.Add(this.textBoxDisplayName);
|
||||
this.groupBoxAccount.Controls.Add(this.label2);
|
||||
this.groupBoxAccount.Controls.Add(this.label1);
|
||||
this.groupBoxAccount.Location = new System.Drawing.Point(8, 123);
|
||||
this.groupBoxAccount.Name = "groupBoxAccount";
|
||||
this.groupBoxAccount.Size = new System.Drawing.Size(861, 341);
|
||||
this.groupBoxAccount.TabIndex = 1;
|
||||
this.groupBoxAccount.TabStop = false;
|
||||
this.groupBoxAccount.Text = "- not logged in -";
|
||||
//
|
||||
// textBoxErrorMessage
|
||||
//
|
||||
this.textBoxErrorMessage.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.textBoxErrorMessage.Location = new System.Drawing.Point(15, 104);
|
||||
this.textBoxErrorMessage.Multiline = true;
|
||||
this.textBoxErrorMessage.Name = "textBoxErrorMessage";
|
||||
this.textBoxErrorMessage.Size = new System.Drawing.Size(841, 231);
|
||||
this.textBoxErrorMessage.TabIndex = 5;
|
||||
this.textBoxErrorMessage.Visible = false;
|
||||
//
|
||||
// labelError
|
||||
//
|
||||
this.labelError.AutoSize = true;
|
||||
this.labelError.ForeColor = System.Drawing.Color.Red;
|
||||
this.labelError.Location = new System.Drawing.Point(13, 88);
|
||||
this.labelError.Name = "labelError";
|
||||
this.labelError.Size = new System.Drawing.Size(77, 13);
|
||||
this.labelError.TabIndex = 4;
|
||||
this.labelError.Text = "Error message:";
|
||||
this.labelError.Visible = false;
|
||||
//
|
||||
// textBoxDomain
|
||||
//
|
||||
this.textBoxDomain.Location = new System.Drawing.Point(144, 50);
|
||||
this.textBoxDomain.Name = "textBoxDomain";
|
||||
this.textBoxDomain.ReadOnly = true;
|
||||
this.textBoxDomain.Size = new System.Drawing.Size(308, 20);
|
||||
this.textBoxDomain.TabIndex = 1;
|
||||
//
|
||||
// textBoxDisplayName
|
||||
//
|
||||
this.textBoxDisplayName.Location = new System.Drawing.Point(144, 25);
|
||||
this.textBoxDisplayName.Name = "textBoxDisplayName";
|
||||
this.textBoxDisplayName.ReadOnly = true;
|
||||
this.textBoxDisplayName.Size = new System.Drawing.Size(308, 20);
|
||||
this.textBoxDisplayName.TabIndex = 0;
|
||||
//
|
||||
// label2
|
||||
//
|
||||
this.label2.AutoSize = true;
|
||||
this.label2.Location = new System.Drawing.Point(92, 53);
|
||||
this.label2.Name = "label2";
|
||||
this.label2.Size = new System.Drawing.Size(46, 13);
|
||||
this.label2.TabIndex = 3;
|
||||
this.label2.Text = "Domain:";
|
||||
//
|
||||
// label1
|
||||
//
|
||||
this.label1.AutoSize = true;
|
||||
this.label1.Location = new System.Drawing.Point(12, 28);
|
||||
this.label1.Name = "label1";
|
||||
this.label1.Size = new System.Drawing.Size(126, 13);
|
||||
this.label1.TabIndex = 2;
|
||||
this.label1.Text = "Application display name:";
|
||||
//
|
||||
// tabPageTeams
|
||||
//
|
||||
this.tabPageTeams.Controls.Add(this.ctrlTabTeams1);
|
||||
this.tabPageTeams.Location = new System.Drawing.Point(4, 22);
|
||||
this.tabPageTeams.Name = "tabPageTeams";
|
||||
this.tabPageTeams.Padding = new System.Windows.Forms.Padding(3);
|
||||
this.tabPageTeams.Size = new System.Drawing.Size(872, 467);
|
||||
this.tabPageTeams.TabIndex = 1;
|
||||
this.tabPageTeams.Text = "MS Teams";
|
||||
this.tabPageTeams.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// ctrlTabTeams1
|
||||
//
|
||||
this.ctrlTabTeams1.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.ctrlTabTeams1.Location = new System.Drawing.Point(3, 3);
|
||||
this.ctrlTabTeams1.Name = "ctrlTabTeams1";
|
||||
this.ctrlTabTeams1.Size = new System.Drawing.Size(866, 461);
|
||||
this.ctrlTabTeams1.TabIndex = 0;
|
||||
//
|
||||
// tabPageLiam
|
||||
//
|
||||
this.tabPageLiam.Controls.Add(this.ctrlTabLiam1);
|
||||
this.tabPageLiam.Location = new System.Drawing.Point(4, 22);
|
||||
this.tabPageLiam.Name = "tabPageLiam";
|
||||
this.tabPageLiam.Padding = new System.Windows.Forms.Padding(3);
|
||||
this.tabPageLiam.Size = new System.Drawing.Size(872, 467);
|
||||
this.tabPageLiam.TabIndex = 2;
|
||||
this.tabPageLiam.Text = "LIAM";
|
||||
this.tabPageLiam.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// ctrlTabLiam1
|
||||
//
|
||||
this.ctrlTabLiam1.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.ctrlTabLiam1.Location = new System.Drawing.Point(3, 3);
|
||||
this.ctrlTabLiam1.Name = "ctrlTabLiam1";
|
||||
this.ctrlTabLiam1.Size = new System.Drawing.Size(866, 461);
|
||||
this.ctrlTabLiam1.TabIndex = 0;
|
||||
//
|
||||
// frmMain
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(880, 493);
|
||||
this.Controls.Add(this.tabControlLiam);
|
||||
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
||||
this.MinimumSize = new System.Drawing.Size(522, 374);
|
||||
this.Name = "frmMain";
|
||||
this.Text = "LIAM test application for MS Teams & Sharepoint";
|
||||
this.Load += new System.EventHandler(this.frmMain_Load);
|
||||
this.tabControlLiam.ResumeLayout(false);
|
||||
this.tabPageLogin.ResumeLayout(false);
|
||||
this.groupBox1.ResumeLayout(false);
|
||||
this.groupBox1.PerformLayout();
|
||||
this.groupBoxAccount.ResumeLayout(false);
|
||||
this.groupBoxAccount.PerformLayout();
|
||||
this.tabPageTeams.ResumeLayout(false);
|
||||
this.tabPageLiam.ResumeLayout(false);
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.TabControl tabControlLiam;
|
||||
private System.Windows.Forms.TabPage tabPageLogin;
|
||||
private System.Windows.Forms.TabPage tabPageTeams;
|
||||
private System.Windows.Forms.GroupBox groupBoxAccount;
|
||||
private System.Windows.Forms.TextBox textBoxDomain;
|
||||
private System.Windows.Forms.TextBox textBoxDisplayName;
|
||||
private System.Windows.Forms.Label label2;
|
||||
private System.Windows.Forms.Label label1;
|
||||
private System.Windows.Forms.TextBox textBoxErrorMessage;
|
||||
private System.Windows.Forms.Label labelError;
|
||||
private System.Windows.Forms.GroupBox groupBox1;
|
||||
private System.Windows.Forms.TextBox textBoxTenant;
|
||||
private System.Windows.Forms.Label label3;
|
||||
private System.Windows.Forms.TextBox textBoxClientApp;
|
||||
private System.Windows.Forms.Label label4;
|
||||
private System.Windows.Forms.Button buttonLogin;
|
||||
private System.Windows.Forms.TextBox textBoxClientSecret;
|
||||
private System.Windows.Forms.Label label5;
|
||||
private System.Windows.Forms.TabPage tabPageLiam;
|
||||
public ctrlTabLiam ctrlTabTeams1;
|
||||
public ctrlTabLiam ctrlTabLiam1;
|
||||
}
|
||||
}
|
||||
|
||||
152
LiamTestTeams/frmMain.cs
Normal file
152
LiamTestTeams/frmMain.cs
Normal file
@@ -0,0 +1,152 @@
|
||||
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 C4IT.Logging;
|
||||
using C4IT.Security;
|
||||
using C4IT.LIAM;
|
||||
|
||||
namespace LiamTestTeams
|
||||
{
|
||||
public partial class frmMain : Form
|
||||
{
|
||||
private const string PPH = "uKl0P.&Wz8;?rpTL";
|
||||
private const string PPK = "f1JtsKzdeOB/rxG7geEwBumb7M0SoH8yMhv0Wi5G29LPpUwGmS6PzcynMnbc8ov5vOId5KJa4gHCDFgwCmXJZbApAG1QCUMwfIJSMaaowPAVcdSWbBHFEL50IpY+/YUKwl/B2pofNi2po0A7ZW00KVa6XFa5CpjFf6EGukwvL0jkEyK+RBoMYrUZWySQB1QS/AEohWCYo8ekcqV5PnBdXHZHyZB2bvK74ePhvJYnTnDUXbOpvEU19iHFzrJ0FxbZt1/2aPcyjHER8GhR7CXkxP2nJbn81bMzqLWQs3Wl1AWH+NbKvEY9+5NgkTqqvkW43Xkm5w8FwoEWIeX4yU50we9H060Dm6g8scyacL1MU0DKjOuxpxCE92fu6kp9DNQpSc6yCcwyzIS7atlwuqJ/N8nhuDcdH6X6hY/wrLgQjIrLi0I4n5vO6fT9hkusPaUHFpZVb2wPkHTJNzw+HF7fvhIROg50s273D5DmGioE0DyxkbJtg63R6LSPy8ok3W91qlD4+6DlPMPJ9ABLttK2ckcnMn/46YVDQ2ABpR7H79XgOf1NYp2WasLbC6KFE1ghpP0GEQughsxeVrNZhsZP351oEuCXVQx6w+iyp3Qv762vZ2vnh2G96drAHuOuLEqF+NZ7SVh3LGpuVE1bQbwd/9S3pdQI3iQcjza3Feoxew3RNaGnnJ63qLPVxc9dSvrRtVNwKOyW8iFdSpf1lHtX8XKPjOXSdhqOwts+Gl/Nn5bQee4uXdkrvxyN7wps1sWQRzkcyLIzplOwH80ZxEoVfgXz6lixMYOKrSly0kSektq6aRemfOBX7TvaQ+f1mgGripjks1UKUdrZG90Lj+WchTzDgxidHYW6z0vjxnO5mtnisryn8KnivpflC4y79/qZJ0ypPXCwKdH5QdvDEOhC2Qj8LX45YoCwanDIVgLbbz5lh9nbIMdH0uBkcbNAzNIjJwUTDWMcgzeeFJiEMKitISA4TpMTuxqKDjuqNa+S8qnYCy6A32O/TFihRIJG25w7khf0gnAdtkrCKOKsHwLKV1bdZxNW/WvA3WYSTIOvQIQsCre0YdqejUAiHLBPfh2ni4JVr2mU0AjulY7tnwsInxl2zR8FrgbziX0TxtXdrzTDMdIfCt1oFkiKUK9mwjlzBQ6Sl5G+wMmf4t8sQw1HTUvy/Ww1uu471+OUZui8npaRuKLG1m4+fvXRxF24YNxWNMCfGTsTOHCcxECwJhxMBDOQ8e6hYcXWDC5qMLnYKm1Gf2EVO5i7/vYtkRmK2SfP9b/Dg4BmW5/LUGEvUL4PT+xQVSHsJ+DZCB16fUfBgxMRoQZfR7U/Q/TCl5m6VCRT0AkcZDy3CiTemXbMylPpUKHURcPEYk6ALJgiuN8CQO+cxYZi16jx7/YJaINMx/855Gj4+fx/gWAdBLVwW2PT4jadx6lk7rwvO/wgPigwtLt6wxeqGbgWy3c2Ikdic7osZCThKD7Z+RPTVdpYudhkhs7Hd1sx+DBbX9fW/sKKONdquvvvKkHYbKV348IVKaMwSS/iSZ0YLwuNPMD3jtBhYoMeub9/SdkegUU0B5P8fA+uDdFppXazTpqgjApSJzkS";
|
||||
|
||||
private readonly cLiamTestTeamsConfig Config = new cLiamTestTeamsConfig();
|
||||
|
||||
public frmMain()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
var SP = new cSecurePassword(PPH);
|
||||
SP.SetRsaKey(PPK, "C4IT_LIAM");
|
||||
cSecurePassword.Instance = SP;
|
||||
}
|
||||
|
||||
private async void buttonLogin_Click(object sender, EventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
Cursor = Cursors.WaitCursor;
|
||||
|
||||
if (tabControlLiam.TabPages.Contains(tabPageTeams))
|
||||
tabControlLiam.TabPages.Remove(tabPageTeams);
|
||||
if (tabControlLiam.TabPages.Contains(tabPageLiam))
|
||||
tabControlLiam.TabPages.Remove(tabPageLiam);
|
||||
|
||||
textBoxDisplayName.Text = "";
|
||||
textBoxDomain.Text = "";
|
||||
|
||||
var Provider = new cLiamProviderData()
|
||||
{
|
||||
ProviderType = eLiamProviderTypes.MsTeams,
|
||||
Domain = textBoxTenant.Text,
|
||||
Credential = new cLiamCredential()
|
||||
{
|
||||
Domain = textBoxTenant.Text,
|
||||
Identification = textBoxClientApp.Text,
|
||||
Secret = textBoxClientSecret.Text
|
||||
}
|
||||
};
|
||||
|
||||
var RootNodeTeams = new TreeNodeMsTeamsRoot(Provider);
|
||||
|
||||
if (!await RootNodeTeams.LogonAsync())
|
||||
{
|
||||
groupBoxAccount.Text = "- Authentication error -";
|
||||
labelError.Visible = true;
|
||||
textBoxErrorMessage.Visible = true;
|
||||
textBoxErrorMessage.Text = RootNodeTeams.getLastError();
|
||||
|
||||
textBoxDisplayName.Text = "";
|
||||
textBoxDomain.Text = "";
|
||||
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
labelError.Visible = false;
|
||||
textBoxErrorMessage.Visible = false;
|
||||
groupBoxAccount.Text = "Authenticated";
|
||||
|
||||
textBoxDisplayName.Text = RootNodeTeams.ToString();
|
||||
textBoxDomain.Text = RootNodeTeams.GetInfoText();
|
||||
|
||||
}
|
||||
|
||||
if (!tabControlLiam.TabPages.Contains(tabPageTeams))
|
||||
tabControlLiam.TabPages.Add(tabPageTeams);
|
||||
|
||||
var RootNodeLiam = new TreeNodeLiamRoot(Provider);
|
||||
if (await RootNodeLiam.LogonAsync())
|
||||
{
|
||||
if (!tabControlLiam.TabPages.Contains(tabPageLiam))
|
||||
tabControlLiam.TabPages.Add(tabPageLiam);
|
||||
await ctrlTabLiam1.Refresh(RootNodeLiam);
|
||||
}
|
||||
|
||||
await ctrlTabTeams1.Refresh(RootNodeTeams);
|
||||
|
||||
tabPageTeams.Select();
|
||||
|
||||
return;
|
||||
}
|
||||
catch (Exception E)
|
||||
{
|
||||
ShowError(E.Message);
|
||||
cLogManager.LogException(E);
|
||||
}
|
||||
|
||||
finally
|
||||
{
|
||||
Cursor = Cursors.Default;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void ShowError(string Message)
|
||||
{
|
||||
textBoxErrorMessage.Text = Message;
|
||||
labelError.Visible = true;
|
||||
textBoxErrorMessage.Visible = true;
|
||||
}
|
||||
|
||||
private void frmMain_Load(object sender, EventArgs e)
|
||||
{
|
||||
Config.Load();
|
||||
textBoxTenant.Text = Config.Tenant;
|
||||
textBoxClientApp.Text = Config.ClientAppID;
|
||||
if (!string.IsNullOrWhiteSpace(Config.ClientSecret))
|
||||
textBoxClientSecret.Text = cSecurePassword.Instance.Decode(Config.ClientSecret);
|
||||
|
||||
ctrlTabLiam1.SetTitle("LIAM nodes:");
|
||||
ctrlTabTeams1.SetTitle("MS Teams");
|
||||
tabControlLiam.TabPages.Remove(tabPageTeams);
|
||||
tabControlLiam.TabPages.Remove(tabPageLiam);
|
||||
|
||||
CheckLogin();
|
||||
}
|
||||
|
||||
private void CheckLogin()
|
||||
{
|
||||
var enabled = false;
|
||||
if (!string.IsNullOrEmpty(textBoxTenant.Text))
|
||||
if (!string.IsNullOrEmpty(textBoxClientApp.Text))
|
||||
if (!string.IsNullOrEmpty(textBoxClientSecret.Text))
|
||||
enabled = true;
|
||||
buttonLogin.Enabled = enabled;
|
||||
}
|
||||
|
||||
private void textBoxInput_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
CheckLogin();
|
||||
}
|
||||
}
|
||||
}
|
||||
8142
LiamTestTeams/frmMain.resx
Normal file
8142
LiamTestTeams/frmMain.resx
Normal file
File diff suppressed because it is too large
Load Diff
126
LiamTestTeams/frmPermissionInput.Designer.cs
generated
Normal file
126
LiamTestTeams/frmPermissionInput.Designer.cs
generated
Normal file
@@ -0,0 +1,126 @@
|
||||
|
||||
namespace LiamTestTeams
|
||||
{
|
||||
partial class frmPermissionInput
|
||||
{
|
||||
/// <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.label1 = new System.Windows.Forms.Label();
|
||||
this.label2 = new System.Windows.Forms.Label();
|
||||
this.textBoxEmail = new System.Windows.Forms.TextBox();
|
||||
this.buttonOK = new System.Windows.Forms.Button();
|
||||
this.buttonCancel = new System.Windows.Forms.Button();
|
||||
this.comboBoxRole = new System.Windows.Forms.ComboBox();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// label1
|
||||
//
|
||||
this.label1.AutoSize = true;
|
||||
this.label1.Location = new System.Drawing.Point(12, 15);
|
||||
this.label1.Name = "label1";
|
||||
this.label1.Size = new System.Drawing.Size(102, 13);
|
||||
this.label1.TabIndex = 0;
|
||||
this.label1.Text = "User e-mail address:";
|
||||
//
|
||||
// label2
|
||||
//
|
||||
this.label2.AutoSize = true;
|
||||
this.label2.Location = new System.Drawing.Point(49, 43);
|
||||
this.label2.Name = "label2";
|
||||
this.label2.Size = new System.Drawing.Size(65, 13);
|
||||
this.label2.TabIndex = 1;
|
||||
this.label2.Text = "Access role:";
|
||||
//
|
||||
// textBoxEmail
|
||||
//
|
||||
this.textBoxEmail.Location = new System.Drawing.Point(120, 12);
|
||||
this.textBoxEmail.Name = "textBoxEmail";
|
||||
this.textBoxEmail.Size = new System.Drawing.Size(139, 20);
|
||||
this.textBoxEmail.TabIndex = 2;
|
||||
this.textBoxEmail.TextChanged += new System.EventHandler(this.textBoxEmail_TextChanged);
|
||||
//
|
||||
// buttonOK
|
||||
//
|
||||
this.buttonOK.DialogResult = System.Windows.Forms.DialogResult.OK;
|
||||
this.buttonOK.Enabled = false;
|
||||
this.buttonOK.Location = new System.Drawing.Point(52, 81);
|
||||
this.buttonOK.Name = "buttonOK";
|
||||
this.buttonOK.Size = new System.Drawing.Size(75, 23);
|
||||
this.buttonOK.TabIndex = 4;
|
||||
this.buttonOK.Text = "OK";
|
||||
this.buttonOK.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// buttonCancel
|
||||
//
|
||||
this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||
this.buttonCancel.Location = new System.Drawing.Point(157, 81);
|
||||
this.buttonCancel.Name = "buttonCancel";
|
||||
this.buttonCancel.Size = new System.Drawing.Size(75, 23);
|
||||
this.buttonCancel.TabIndex = 5;
|
||||
this.buttonCancel.Text = "Cancel";
|
||||
this.buttonCancel.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// comboBoxRole
|
||||
//
|
||||
this.comboBoxRole.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.comboBoxRole.FormattingEnabled = true;
|
||||
this.comboBoxRole.Location = new System.Drawing.Point(120, 40);
|
||||
this.comboBoxRole.Name = "comboBoxRole";
|
||||
this.comboBoxRole.Size = new System.Drawing.Size(139, 21);
|
||||
this.comboBoxRole.TabIndex = 6;
|
||||
//
|
||||
// frmPermissionInput
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(290, 118);
|
||||
this.Controls.Add(this.comboBoxRole);
|
||||
this.Controls.Add(this.buttonCancel);
|
||||
this.Controls.Add(this.buttonOK);
|
||||
this.Controls.Add(this.textBoxEmail);
|
||||
this.Controls.Add(this.label2);
|
||||
this.Controls.Add(this.label1);
|
||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
|
||||
this.Name = "frmPermissionInput";
|
||||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
|
||||
this.Text = "Select permission to add";
|
||||
this.Load += new System.EventHandler(this.frmPermissionInput_Load);
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.Label label1;
|
||||
private System.Windows.Forms.Label label2;
|
||||
private System.Windows.Forms.Button buttonOK;
|
||||
private System.Windows.Forms.Button buttonCancel;
|
||||
public System.Windows.Forms.TextBox textBoxEmail;
|
||||
public System.Windows.Forms.ComboBox comboBoxRole;
|
||||
}
|
||||
}
|
||||
43
LiamTestTeams/frmPermissionInput.cs
Normal file
43
LiamTestTeams/frmPermissionInput.cs
Normal file
@@ -0,0 +1,43 @@
|
||||
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;
|
||||
|
||||
namespace LiamTestTeams
|
||||
{
|
||||
public partial class frmPermissionInput : Form
|
||||
{
|
||||
public frmPermissionInput()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
private void frmPermissionInput_Load(object sender, EventArgs e)
|
||||
{
|
||||
comboBoxRole.SelectedIndex = 0;
|
||||
}
|
||||
|
||||
private void textBoxEmail_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
bool isValid = false;
|
||||
if (!string.IsNullOrWhiteSpace(textBoxEmail.Text))
|
||||
{
|
||||
try
|
||||
{
|
||||
var mail = new System.Net.Mail.MailAddress(textBoxEmail.Text.Trim());
|
||||
isValid = mail != null;
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
buttonOK.Enabled = isValid;
|
||||
}
|
||||
}
|
||||
}
|
||||
120
LiamTestTeams/frmPermissionInput.resx
Normal file
120
LiamTestTeams/frmPermissionInput.resx
Normal 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>
|
||||
@@ -0,0 +1,4 @@
|
||||
// <autogenerated />
|
||||
using System;
|
||||
using System.Reflection;
|
||||
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.6.2", FrameworkDisplayName = ".NET Framework 4.6.2")]
|
||||
Binary file not shown.
0
LiamTestTeams/obj/Debug/LiamTest.67C85597.Up2Date
Normal file
0
LiamTestTeams/obj/Debug/LiamTest.67C85597.Up2Date
Normal file
Binary file not shown.
Binary file not shown.
@@ -0,0 +1 @@
|
||||
2f632260cf699d0a9cd328e57cebdb2f7d8a1af17a3b5f120fbbd34441958e98
|
||||
@@ -0,0 +1,24 @@
|
||||
C:\Workspace\C4IT DEV LIAM WEB Service\LiamTestTeams\bin\Debug\LiamTestTeams.exe.config
|
||||
C:\Workspace\C4IT DEV LIAM WEB Service\LiamTestTeams\bin\Debug\LiamTestTeams.exe
|
||||
C:\Workspace\C4IT DEV LIAM WEB Service\LiamTestTeams\bin\Debug\LiamTestTeams.pdb
|
||||
C:\Workspace\C4IT DEV LIAM WEB Service\LiamTestTeams\bin\Debug\LiamBaseClasses.dll
|
||||
C:\Workspace\C4IT DEV LIAM WEB Service\LiamTestTeams\bin\Debug\LiamHelper.dll
|
||||
C:\Workspace\C4IT DEV LIAM WEB Service\LiamTestTeams\bin\Debug\LiamMsGraph.dll
|
||||
C:\Workspace\C4IT DEV LIAM WEB Service\LiamTestTeams\bin\Debug\LiamMsTeams.dll
|
||||
C:\Workspace\C4IT DEV LIAM WEB Service\LiamTestTeams\bin\Debug\Newtonsoft.Json.dll
|
||||
C:\Workspace\C4IT DEV LIAM WEB Service\LiamTestTeams\bin\Debug\LiamBaseClasses.pdb
|
||||
C:\Workspace\C4IT DEV LIAM WEB Service\LiamTestTeams\bin\Debug\LiamHelper.pdb
|
||||
C:\Workspace\C4IT DEV LIAM WEB Service\LiamTestTeams\bin\Debug\LiamMsGraph.pdb
|
||||
C:\Workspace\C4IT DEV LIAM WEB Service\LiamTestTeams\bin\Debug\LiamMsTeams.pdb
|
||||
C:\Workspace\C4IT DEV LIAM WEB Service\LiamTestTeams\obj\Debug\LiamTestTeams.csproj.AssemblyReference.cache
|
||||
C:\Workspace\C4IT DEV LIAM WEB Service\LiamTestTeams\obj\Debug\LiamTestTeams.csproj.SuggestedBindingRedirects.cache
|
||||
C:\Workspace\C4IT DEV LIAM WEB Service\LiamTestTeams\obj\Debug\LiamTestTeams.exe.config
|
||||
C:\Workspace\C4IT DEV LIAM WEB Service\LiamTestTeams\obj\Debug\LiamTestTeams.ctrlTabLiam.resources
|
||||
C:\Workspace\C4IT DEV LIAM WEB Service\LiamTestTeams\obj\Debug\LiamTestTeams.frmMain.resources
|
||||
C:\Workspace\C4IT DEV LIAM WEB Service\LiamTestTeams\obj\Debug\LiamTestTeams.frmPermissionInput.resources
|
||||
C:\Workspace\C4IT DEV LIAM WEB Service\LiamTestTeams\obj\Debug\LiamTestTeams.Properties.Resources.resources
|
||||
C:\Workspace\C4IT DEV LIAM WEB Service\LiamTestTeams\obj\Debug\LiamTestTeams.csproj.GenerateResource.cache
|
||||
C:\Workspace\C4IT DEV LIAM WEB Service\LiamTestTeams\obj\Debug\LiamTestTeams.csproj.CoreCompileInputs.cache
|
||||
C:\Workspace\C4IT DEV LIAM WEB Service\LiamTestTeams\obj\Debug\LiamTest.67C85597.Up2Date
|
||||
C:\Workspace\C4IT DEV LIAM WEB Service\LiamTestTeams\obj\Debug\LiamTestTeams.exe
|
||||
C:\Workspace\C4IT DEV LIAM WEB Service\LiamTestTeams\obj\Debug\LiamTestTeams.pdb
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
1ca0cc254a718603c74e05772c3db01a91d88ee2c1d09bc07150bf95e8eb18cb
|
||||
BIN
LiamTestTeams/obj/Debug/LiamTestTeams.ctrlTabLiam.resources
Normal file
BIN
LiamTestTeams/obj/Debug/LiamTestTeams.ctrlTabLiam.resources
Normal file
Binary file not shown.
BIN
LiamTestTeams/obj/Debug/LiamTestTeams.exe
Normal file
BIN
LiamTestTeams/obj/Debug/LiamTestTeams.exe
Normal file
Binary file not shown.
38
LiamTestTeams/obj/Debug/LiamTestTeams.exe.config
Normal file
38
LiamTestTeams/obj/Debug/LiamTestTeams.exe.config
Normal file
@@ -0,0 +1,38 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2" />
|
||||
</startup>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.1" newVersion="4.0.1.1" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Newtonsoft.Json" culture="neutral" publicKeyToken="30ad4fe6b2a6aeed" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.ValueTuple" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Diagnostics.DiagnosticSource" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-5.0.0.1" newVersion="5.0.0.1" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.Graph.Core" publicKeyToken="31bf3856ad364e35" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-1.24.0.0" newVersion="1.24.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.Identity.Client" publicKeyToken="0a613f4dd989e8ae" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.27.0.0" newVersion="4.27.0.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
</configuration>
|
||||
BIN
LiamTestTeams/obj/Debug/LiamTestTeams.frmMain.resources
Normal file
BIN
LiamTestTeams/obj/Debug/LiamTestTeams.frmMain.resources
Normal file
Binary file not shown.
Binary file not shown.
BIN
LiamTestTeams/obj/Debug/LiamTestTeams.pdb
Normal file
BIN
LiamTestTeams/obj/Debug/LiamTestTeams.pdb
Normal file
Binary file not shown.
@@ -0,0 +1,4 @@
|
||||
// <autogenerated />
|
||||
using System;
|
||||
using System.Reflection;
|
||||
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.6.2", FrameworkDisplayName = ".NET Framework 4.6.2")]
|
||||
Binary file not shown.
0
LiamTestTeams/obj/Release/LiamTest.67C85597.Up2Date
Normal file
0
LiamTestTeams/obj/Release/LiamTest.67C85597.Up2Date
Normal file
Binary file not shown.
Binary file not shown.
@@ -0,0 +1 @@
|
||||
1c3a11131b5f22f88eaf2794057b85cc5ec639dab36b37bded2712dd1af36b0c
|
||||
@@ -0,0 +1,24 @@
|
||||
C:\Workspace\C4IT DEV LIAM WEB Service\LiamTestTeams\bin\Release\LiamTestTeams.exe.config
|
||||
C:\Workspace\C4IT DEV LIAM WEB Service\LiamTestTeams\bin\Release\LiamTestTeams.exe
|
||||
C:\Workspace\C4IT DEV LIAM WEB Service\LiamTestTeams\bin\Release\LiamTestTeams.pdb
|
||||
C:\Workspace\C4IT DEV LIAM WEB Service\LiamTestTeams\bin\Release\LiamBaseClasses.dll
|
||||
C:\Workspace\C4IT DEV LIAM WEB Service\LiamTestTeams\bin\Release\LiamHelper.dll
|
||||
C:\Workspace\C4IT DEV LIAM WEB Service\LiamTestTeams\bin\Release\LiamMsGraph.dll
|
||||
C:\Workspace\C4IT DEV LIAM WEB Service\LiamTestTeams\bin\Release\LiamMsTeams.dll
|
||||
C:\Workspace\C4IT DEV LIAM WEB Service\LiamTestTeams\bin\Release\Newtonsoft.Json.dll
|
||||
C:\Workspace\C4IT DEV LIAM WEB Service\LiamTestTeams\bin\Release\LiamBaseClasses.pdb
|
||||
C:\Workspace\C4IT DEV LIAM WEB Service\LiamTestTeams\bin\Release\LiamHelper.pdb
|
||||
C:\Workspace\C4IT DEV LIAM WEB Service\LiamTestTeams\bin\Release\LiamMsGraph.pdb
|
||||
C:\Workspace\C4IT DEV LIAM WEB Service\LiamTestTeams\bin\Release\LiamMsTeams.pdb
|
||||
C:\Workspace\C4IT DEV LIAM WEB Service\LiamTestTeams\obj\Release\LiamTestTeams.csproj.AssemblyReference.cache
|
||||
C:\Workspace\C4IT DEV LIAM WEB Service\LiamTestTeams\obj\Release\LiamTestTeams.csproj.SuggestedBindingRedirects.cache
|
||||
C:\Workspace\C4IT DEV LIAM WEB Service\LiamTestTeams\obj\Release\LiamTestTeams.exe.config
|
||||
C:\Workspace\C4IT DEV LIAM WEB Service\LiamTestTeams\obj\Release\LiamTestTeams.ctrlTabLiam.resources
|
||||
C:\Workspace\C4IT DEV LIAM WEB Service\LiamTestTeams\obj\Release\LiamTestTeams.frmMain.resources
|
||||
C:\Workspace\C4IT DEV LIAM WEB Service\LiamTestTeams\obj\Release\LiamTestTeams.frmPermissionInput.resources
|
||||
C:\Workspace\C4IT DEV LIAM WEB Service\LiamTestTeams\obj\Release\LiamTestTeams.Properties.Resources.resources
|
||||
C:\Workspace\C4IT DEV LIAM WEB Service\LiamTestTeams\obj\Release\LiamTestTeams.csproj.GenerateResource.cache
|
||||
C:\Workspace\C4IT DEV LIAM WEB Service\LiamTestTeams\obj\Release\LiamTestTeams.csproj.CoreCompileInputs.cache
|
||||
C:\Workspace\C4IT DEV LIAM WEB Service\LiamTestTeams\obj\Release\LiamTest.67C85597.Up2Date
|
||||
C:\Workspace\C4IT DEV LIAM WEB Service\LiamTestTeams\obj\Release\LiamTestTeams.exe
|
||||
C:\Workspace\C4IT DEV LIAM WEB Service\LiamTestTeams\obj\Release\LiamTestTeams.pdb
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
1ca0cc254a718603c74e05772c3db01a91d88ee2c1d09bc07150bf95e8eb18cb
|
||||
BIN
LiamTestTeams/obj/Release/LiamTestTeams.ctrlTabLiam.resources
Normal file
BIN
LiamTestTeams/obj/Release/LiamTestTeams.ctrlTabLiam.resources
Normal file
Binary file not shown.
BIN
LiamTestTeams/obj/Release/LiamTestTeams.exe
Normal file
BIN
LiamTestTeams/obj/Release/LiamTestTeams.exe
Normal file
Binary file not shown.
38
LiamTestTeams/obj/Release/LiamTestTeams.exe.config
Normal file
38
LiamTestTeams/obj/Release/LiamTestTeams.exe.config
Normal file
@@ -0,0 +1,38 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2" />
|
||||
</startup>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.1" newVersion="4.0.1.1" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Newtonsoft.Json" culture="neutral" publicKeyToken="30ad4fe6b2a6aeed" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.ValueTuple" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Diagnostics.DiagnosticSource" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-5.0.0.1" newVersion="5.0.0.1" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.Graph.Core" publicKeyToken="31bf3856ad364e35" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-1.24.0.0" newVersion="1.24.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.Identity.Client" publicKeyToken="0a613f4dd989e8ae" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.27.0.0" newVersion="4.27.0.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
</configuration>
|
||||
BIN
LiamTestTeams/obj/Release/LiamTestTeams.frmMain.resources
Normal file
BIN
LiamTestTeams/obj/Release/LiamTestTeams.frmMain.resources
Normal file
Binary file not shown.
Binary file not shown.
BIN
LiamTestTeams/obj/Release/LiamTestTeams.pdb
Normal file
BIN
LiamTestTeams/obj/Release/LiamTestTeams.pdb
Normal file
Binary file not shown.
Reference in New Issue
Block a user