public void Run(string readerName)
            {
                var reader        = new SmartCardReader(readerName);
                var secureChannel = new Readers.SecureSession.SecureChannel(reader);

                try
                {
                    ConsoleWriter.Instance.PrintSplitter();
                    ConsoleWriter.Instance.PrintTask("Establishing Secure Session");

                    if (!IsValidSessionKeyFormat(EncKey) || !IsValidSessionKeyFormat(MacKey))
                    {
                        throw new ArgumentException("Secure session key format is incorrect, correct format of session key string is 32 character long hexadecimal string without hex specifier. Example: \"00000000000000000000000000000000\"");
                    }

                    secureChannel.Establish(EncKey + MacKey, KeyRelatedAccesRight);

                    if (secureChannel.IsSessionActive)
                    {
                        ConsoleWriter.Instance.PrintMessage("Session established");
                        ConsoleWriter.Instance.PrintSplitter();

                        ReaderHelper.GeneralAuthenticateiClass(secureChannel,
                                                               "Authenticate without implicit selection. Key from slot: ", BookNumber.Book0,
                                                               PageNumber.Page0, GeneralAuthenticateCommand.ImplicitSelection.Off,
                                                               GeneralAuthenticateCommand.iClassKeyType.PicoPassCreditKeyKC, 0x21);

                        ReaderHelper.UpdateBinaryCommand(secureChannel, "Update binary, target block nr: ",
                                                         UpdateBinaryCommand.Type.Plain, 0x14, "BACDEF0122345678");

                        ConsoleWriter.Instance.PrintSplitter();
                    }
                    else
                    {
                        ConsoleWriter.Instance.PrintError("Failed to establish session");
                    }
                }
                catch (Exception e)
                {
                    ConsoleWriter.Instance.PrintError(e.Message);
                }
                finally
                {
                    if (secureChannel.IsSessionActive)
                    {
                        secureChannel.Terminate();
                        ConsoleWriter.Instance.PrintMessage("Secure Session terminated.");
                    }
                    if (reader.IsConnected)
                    {
                        reader.Disconnect(CardDisposition.Unpower);
                        ConsoleWriter.Instance.PrintMessage("Reader connection closed");
                    }
                    ConsoleWriter.Instance.PrintSplitter();
                }
            }
            public void Run(string readerName)
            {
                var reader        = new SmartCardReader(readerName);
                var secureChannel = new Readers.SecureSession.SecureChannel(reader);

                try
                {
                    ConsoleWriter.Instance.PrintSplitter();
                    ConsoleWriter.Instance.PrintTask("Establishing SAM Secure Session");

                    if (!IsValidSessionKeyFormat(EncKey) || !IsValidSessionKeyFormat(MacKey))
                    {
                        throw new ArgumentException("Secure session key format is incorrect, correct format of session key string is 32 character long hexadecimal string without hex specifier. Example: \"00000000000000000000000000000000\"");
                    }

                    secureChannel.Establish(EncKey + MacKey, KeyRelatedAccessRight);

                    if (secureChannel.IsSessionActive)
                    {
                        ConsoleWriter.Instance.PrintMessage("Session established");
                        ConsoleWriter.Instance.PrintSplitter();

                        LoadKeyCommand(secureChannel, "Load Mifare Key: ", 0x00,
                                       Readers.AViatoR.Components.LoadKeyCommand.KeyType.CardKey,
                                       Readers.AViatoR.Components.LoadKeyCommand.Persistence.Persistent,
                                       Readers.AViatoR.Components.LoadKeyCommand.Transmission.Plain,
                                       Readers.AViatoR.Components.LoadKeyCommand.KeyLength._6Bytes, "FFFFFFFFFFFF");

                        LoadKeyCommand(secureChannel, "Load iCLASS volatile key: ", 0x41,
                                       Readers.AViatoR.Components.LoadKeyCommand.KeyType.CardKey,
                                       Readers.AViatoR.Components.LoadKeyCommand.Persistence.Volatile,
                                       Readers.AViatoR.Components.LoadKeyCommand.Transmission.Plain,
                                       Readers.AViatoR.Components.LoadKeyCommand.KeyLength._8Bytes, "FFFFFFFFFFFFFFFF");

                        LoadKeyCommand(secureChannel, "Load Secure Session ReadOnlyAccess Enc key: ", 0x48,
                                       Readers.AViatoR.Components.LoadKeyCommand.KeyType.ReaderKey,
                                       Readers.AViatoR.Components.LoadKeyCommand.Persistence.Persistent,
                                       Readers.AViatoR.Components.LoadKeyCommand.Transmission.Plain,
                                       Readers.AViatoR.Components.LoadKeyCommand.KeyLength._16Bytes, "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC");

                        LoadKeyCommand(secureChannel, "Load Secure Session ReadOnlyAccess Mac key: ", 0x49,
                                       Readers.AViatoR.Components.LoadKeyCommand.KeyType.ReaderKey,
                                       Readers.AViatoR.Components.LoadKeyCommand.Persistence.Persistent,
                                       Readers.AViatoR.Components.LoadKeyCommand.Transmission.Plain,
                                       Readers.AViatoR.Components.LoadKeyCommand.KeyLength._16Bytes, "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD");

                        LoadKeyCommand(secureChannel, "Load Secure Session ReadWriteAccess Enc key: ", 0x46,
                                       Readers.AViatoR.Components.LoadKeyCommand.KeyType.ReaderKey,
                                       Readers.AViatoR.Components.LoadKeyCommand.Persistence.Persistent,
                                       Readers.AViatoR.Components.LoadKeyCommand.Transmission.Plain,
                                       Readers.AViatoR.Components.LoadKeyCommand.KeyLength._16Bytes, "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");

                        LoadKeyCommand(secureChannel, "Load Secure Session ReadWriteAccess Mac key: ", 0x47,
                                       Readers.AViatoR.Components.LoadKeyCommand.KeyType.ReaderKey,
                                       Readers.AViatoR.Components.LoadKeyCommand.Persistence.Persistent,
                                       Readers.AViatoR.Components.LoadKeyCommand.Transmission.Plain,
                                       Readers.AViatoR.Components.LoadKeyCommand.KeyLength._16Bytes, "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB");

                        ConsoleWriter.Instance.PrintSplitter();
                    }
                    else
                    {
                        ConsoleWriter.Instance.PrintError("Failed to establish session");
                    }
                }
                catch (Exception e)
                {
                    ConsoleWriter.Instance.PrintError(e.Message);
                }
                finally
                {
                    if (secureChannel.IsSessionActive)
                    {
                        secureChannel.Terminate();
                        ConsoleWriter.Instance.PrintMessage("SAM Secure Session terminated.");
                    }
                    if (reader.IsConnected)
                    {
                        reader.Disconnect(CardDisposition.Unpower);
                        ConsoleWriter.Instance.PrintMessage("Reader connection closed");
                    }
                    ConsoleWriter.Instance.PrintSplitter();
                }
            }