<?php
/*
***********************************************************
*       MÓDULO PARA ATUALIZACAO DO ECOOK RETAGUARDA       *
***********************************************************
* Desenvolvedor:  André Leandro Lacerda dos Santos Júnior *
* Data de criação..........: 16/04/2019                   *
***********************************************************
*/
// : Variáveis de trabalho
$sRetornoMod_HTML  = '';               // Resposta de retorno no formato HTML
$sRetornoMod_TipM  = 'text/plain;charset=utf-8'; // Tipo mime da retorno (Ex: 'text/html', 'image/png', 'text/plain', 'application/x-compressed', ...)
$sRetornoMod_Bina  = '';               // Resposta de retorno no formato binário
$nTempo_Limite_PHP = 30*60;            // Limite de tempo em segundos de execução do PHP
$sPulaLinha        = CHR(13).CHR(10);
$aDados_Atu        = [];               // Todos os dados carregado de um arquivo JSon de informação da atualização
$sTitulo_Modulo    = 'Atualização do ECook';
$sCaminhoTemp = GETCWD().'/atualizacao_tmp';
$sCaminho_Bkp = $sCaminhoTemp.'/backup_ECook';
$sArq_Novo_Zip = $sCaminhoTemp.'/ECook_Novo.zip';
$sUStatus_Arq = 'atualizacao_tmp/data_status.json';
// : Parametros externos
$sModulo_Act = @$_POST['ModAct'];      // Chamado da ação no módulo
// : Procedimento de carga das variáveis globais padronizadas
$sVars_Global_Pad =
  'Global '.
    '$sRetornoMod_HTML, $sRetornoMod_TipM, $sRetornoMod_Bina, $nTempo_Limite_PHP, $sPulaLinha, $sTitulo_Modulo, $sModulo_Act, $aDados_Atu,'.
    '$sCaminhoTemp    , $sCaminho_Bkp    , $sArq_Novo_Zip   , $sUStatus_Arq'.
  ';';
//
SET_TIME_LIMIT($nTempo_Limite_PHP);    // Tempo de execução do PHP
DATE_DEFAULT_TIMEZONE_SET("America/Sao_Paulo");
//
// -> Carrega o arquivo de dados da atualização
$aDados_Atu = @JSON_DECODE( Ler_Arquivo( $sCaminhoTemp."/data_update.json" ) , True);
//
// -> Preparação para chamada da ação
If ( EMPTY($sModulo_Act) ) {  $sModulo_Act = 'MAIN';  }
$sChamada_de_Acao = "Acao_".STRTOUPPER($sModulo_Act);
If ( FUNCTION_EXISTS($sChamada_de_Acao) ) {
   EVAL( $sChamada_de_Acao.'();' );   // Chamar ação por função.     Ex: Acao_MAIN()
} Else {
   $sRetornoMod_HTML = 'ERRO: Ação desconhecida';
}
//
// -> Retorno em HTML
If ( STRLEN($sRetornoMod_HTML)>5 ) {
   $sRetornoMod_TipM = 'text/html;charset=utf-8';
   $sRetornoMod_Bina = $sRetornoMod_HTML;
   $sRetornoMod_HTML = '';
}
// -> Retorno final
If ( STRLEN($sRetornoMod_Bina)>0 ) {
   OB_CLEAN();
   HEADER( 'Cache-Control: no-cache, must-revalidate'  );
   HEADER(  'Content-Type: '.$sRetornoMod_TipM );
   HEADER('Content-Length: '.STRLEN($sRetornoMod_Bina) );
   ECHO $sRetornoMod_Bina;
}
//
// *** FIM ***
EXIT;
// *** FIM ***
//
//
//
Function Acao_MAIN() {
  Global $sVars_Global_Pad; EVAL($sVars_Global_Pad);            // Carga das variáveis globais
  //
  // : Quadro de informações
  $sQuadro_HTML =
    '<table width="100%" height="100%">'.
     '<tr>'.
      '<td align="center" valign="middle">'.
       '<style type="text/css" rel="stylesheet">'.
        '.qdr_Janela {'.
         'background: #FAF9F5;'.
         '-webkit-border-radius: 6px;'.
         '-moz-border-radius: 6px;'.
         'border-radius: 6px;'.
         'border: solid #16ABFF 2px;'.
         'padding: 0px 0px 0px 0px;'.
        '}'.
        '.btn_Pad {'.
          'background: #57b1ed;'.
          'background-image: -webkit-linear-gradient(top, #57b1ed, #0c82cc);'.
          'background-image: -moz-linear-gradient(top, #57b1ed, #0c82cc);'.
          'background-image: -ms-linear-gradient(top, #57b1ed, #0c82cc);'.
          'background-image: -o-linear-gradient(top, #57b1ed, #0c82cc);'.
          'background-image: linear-gradient(to bottom, #57b1ed, #0c82cc);'.
          '-webkit-border-radius: 6px;'.
          '-moz-border-radius: 6px;'.
          'border-radius: 6px;'.
          'font-family: Arial;'.
          'color: #ffffff;'.
          'font-size: 17px;'.
          'padding: 8px 20px 8px 20px;'.
          'border: solid #1f81c2 1px;'.
          'text-decoration: none;'.
          'cursor: pointer;'.
        '}'.
        '.btn_Pad:hover {'.
          'background: #f78103;'.
          'background-image: -webkit-linear-gradient(top, #f78103, #e87800);'.
          'background-image: -moz-linear-gradient(top, #f78103, #e87800);'.
          'background-image: -ms-linear-gradient(top, #f78103, #e87800);'.
          'background-image: -o-linear-gradient(top, #f78103, #e87800);'.
          'background-image: linear-gradient(to bottom, #f78103, #e87800);'.
          'border: solid #c26100 1px;'.
          'text-decoration: none;'.
        '}'.	
       '</style>'.
       '<div style="width:540px; height:200px;" class="qdr_Janela">'.
        //
        '<table width="100%" height="100%">'.
         '<tr>'.
          '<td height="32px" align="center" valign="middle" style="background:#0793FF; color:#FFFFFF; font-size:13px; font-weight:bold; border-radius: 6px;">'.
           $sTitulo_Modulo.
           '&nbsp;&nbsp;-&nbsp;&nbsp;'.
           'Atualizando da versão '.$aDados_Atu['VERSAO_ANTERIOR'].' para '.$aDados_Atu['VERSAO'].
          '</td>'.
         '</tr>'.
         '<tr>'.
          '<td>'.
           //
           '<div style="width:100%; height:100%;" id="qdr_Jan_Principal">'.
            '<table width="100%" height="100%">'.
             '<tr>'.
              '<td align="center" valign="middle" style="font-size:14px; font-weight:bold;">'.
               'Preparando para atualização do eCook, aguarde...'.
              '</td>'.
             '</tr>'.
            '</table>'.
           '</div>'.
           //
          '</td>'.
         '</tr>'.
        '</table>'.
        //
       '</div>'.
      '</td>'.
     '</tr>'.
    '</table>';
  // : Script de controle
  $sScript_Js =
    "var oQdr_Jan = $('#qdr_Jan_Principal');".
    "var nEspera_Download = 0;".
    "var bVerifica_Status = true;".
    "var bDownload_Concluido = false;".
    "var f_Verifica_Status =".
      "function () {".
        "if ( bVerifica_Status ) {".
           "$.ajax(".
             "{ type  : 'GET' , url     : './".$sUStatus_Arq."',".
               "cache : false , timeout : 2000,".
             "}".
           ").always(".
             "function (vDados, sStatus, vRetorno) {".
               //"console.log(sStatus);".   // ** Para testes **
               "if ( sStatus == 'success' ) {".
                  "console.log(vDados);".
                  "if ( vDados !== null ) {".
                      "f_Interpretar_Status(vDados);".
                  "}".
               "} else {".
                  "if ( nEspera_Download == 0 ) {".
                     "f_Acao_Download();".
                     "nEspera_Download = 1;".
                  "} else {".
                     "nEspera_Download++;".
                     "if ( nEspera_Download > 10 ) {".
                         "nEspera_Download = 0;".
                     "}".
                  "}".
               "}".
               "setTimeout( function () { f_Verifica_Status(); } , 500 );".
             "}".
           ");".
        "} else {".
           "setTimeout( function () { f_Verifica_Status(); } , 1000 );".
        "}".
      "};".
    //
    "var f_Interpretar_Status = ".
      "function (vDados) {".
        // Efetuando download da nova versão
        "if ( vDados.Download_Total !== undefined && (! bDownload_Concluido) ) {".
           "var sMensagem = '';".
           "if ( vDados.Download_Total < 1 ) { ".
               "sMensagem = 'Iniciando o download...';".
           "} else {".
               "if ( vDados.Download_Total == vDados.Download_Atual ) {".
                   "sMensagem = 'Concluindo o download...';".
                   "bDownload_Concluido = true;".
                   "setTimeout( function () { f_Acao_Instalar(); } , 1000 );".
               "} else {".
                   "var nPorcentual = ( ( vDados.Download_Atual / vDados.Download_Total ) * 100 );".
                   "nPorcentual = nPorcentual.toFixed(0);".
                   "var sPorcentual = nPorcentual.toString();".
                   "sMensagem = 'Baixando nova versão, '+sPorcentual+' %...';".
               "}".
           "}".
           "oQdr_Jan.html('".
             '<table width="100%" height="100%">'.
              '<tr>'.
               '<td align="center" valign="middle" style="font-size:14px; font-weight:bold;">'.
                "'+sMensagem+'".
               '</td>'.
              '</tr>'.
             '</table>'.
           "');".
        // Houve erro no download
        "} else if ( vDados.Download_Erro !== undefined ) {".
           "oQdr_Jan.html('".
             '<table width="100%" height="100%">'.
              '<tr>'.
               '<td id="td_Msg_Download" align="center" valign="middle" style="font-size:14px; font-weight:bold;">'.
                'Houve erro ao efetuar o download.'.
               '</td>'.
              '</tr>'.
              '<tr>'.
               '<td align="center" valign="middle" >'.
                '<input id="bt_ECook" class="btn_Pad" type="button" value=" Voltar para o eCook ">'.
               '</td>'.
              '</tr>'.
             '</table>'.
           "');".
           "bVerifica_Status = false;".
           "f_Acao_Limpar();".
           "$('#bt_ECook').click( function () { window.location.href = './'; } );".
        // Efetuando instalação do novo eCook
        "} else if ( vDados.Instalacao !== undefined ) {".
           "bDownload_Concluido = true;".
           "oQdr_Jan.html('".
             '<table width="100%" height="100%">'.
              '<tr>'.
               '<td id="td_Msg_Instalacao" align="center" valign="middle" style="font-size:14px; font-weight:bold;">'.
                'Instalando nova versão do eCook '.$aDados_Atu['VERSAO'].'...'.
               '</td>'.
              '</tr>'.
             '</table>'.
           "');".
        // Houve erro na instalação do novo eCook
        "} else if ( vDados.Instalacao_Erro !== undefined ) {".
           "oQdr_Jan.html('".
             '<table width="100%" height="100%">'.
              '<tr>'.
               '<td id="td_Msg_Instalacao" align="center" valign="middle" style="font-size:14px; font-weight:bold;">'.
                'Houve erro ao efetuar ao instalar o eCook.'.
               '</td>'.
              '</tr>'.
             '</table>'.
           "');".
           "bVerifica_Status = false;".
           "f_Acao_Limpar();".
           "setTimeout( function () { window.location.href = './'; } , 3000 );".
        // Instalação concluída, iniciar atualização de banco de dados
        "} else if ( vDados.Instalacao_Concluida !== undefined ) {".
           "f_Acao_Atualizar_BD();".
        // Efetuando atualização de banco de dados
        "} else if ( vDados.Atualizar_BD !== undefined ) {".
           "var sMensagem = '';".
           "if ( vDados.Atualizar_BD < 1 ) { ".
               "sMensagem = 'Iniciando atualização de banco de dados...';".
           "} else {".
               "var sPorcentual = vDados.Atualizar_BD.toString();".
               "sMensagem = 'Atualizando banco de dados, '+sPorcentual+' %...';".
           "}".
           "oQdr_Jan.html('".
             '<table width="100%" height="100%">'.
              '<tr>'.
               '<td id="td_Msg_BD" align="center" valign="middle" style="font-size:14px; font-weight:bold;">'.
                "'+sMensagem+'".
               '</td>'.
              '</tr>'.
             '</table>'.
           "');".
        // Houve erro na atualização
        "} else if ( vDados.Atualizar_BD_Erro !== undefined ) {".
           "var sMensagem = '';".
           "if ( vDados.Mensagem !== undefined ) {".
               "sMensagem = '<br>'+vDados.Mensagem;".
           "}".
           "oQdr_Jan.html('".
             '<table width="100%" height="100%">'.
              '<tr>'.
               '<td id="td_Msg_BD" align="center" valign="middle" style="font-size:14px; font-weight:bold;">'.
                'Houve erro ao efetuar a atualização de banco de dados.'.
                "'+sMensagem+'".
               '</td>'.
              '</tr>'.
              '<tr>'.
               '<td align="center" valign="middle" >'.
                '<input id="bt_ECook" class="btn_Pad" type="button" value=" Voltar para o eCook ">'.
               '</td>'.
              '</tr>'.
             '</table>'.
           "');".
           "bVerifica_Status = false;".
           "f_Acao_Limpar();".
           "$('#bt_ECook').click( function () { window.location.href = './'; } );".
        // Instalação e atualização do novo eCook foi concluída
        "} else if ( vDados.Atualizar_BD_Concluida !== undefined ) {".
           "oQdr_Jan.html('".
             '<table width="100%" height="100%">'.
              '<tr>'.
               '<td id="td_Msg_Instalacao" align="center" valign="middle" style="font-size:14px; font-weight:bold;">'.
                'Instalação da nova versão do eCook '.$aDados_Atu['VERSAO'].' foi concluída.'.
               '</td>'.
              '</tr>'.
              '<tr>'.
               '<td align="center" valign="middle" >'.
                '<input id="bt_ECook" class="btn_Pad" type="button" value=" Abrir eCook ">'.
               '</td>'.
              '</tr>'.
             '</table>'.
           "');".
           "bVerifica_Status = false;".
           "f_Acao_Limpar_Tudo();".
           "$('#bt_ECook').click( function () { window.location.href = './'; } );".
           //"setTimeout( function () { window.location.href = './'; } , 3000 );".
        "}".
      "};".
    //
    "var f_Acao_Download =".
      "function () {".
        "var PostDados  = { ModAct : 'E_DOWNLOAD' };".
        "$.ajax(".
          "{ type  : 'POST' , url     : window.location.href,".
            "cache : false  , timeout : 2000,".
            "data  : PostDados".
          "}".
        ").always(".
          "function (vDados, sStatus, vRetorno) {".
          "}".
        ");".
      "};".
    //
    "var f_Acao_Instalar =".
      "function () {".
        "bVerifica_Status = false;".
        "var PostDados  = { ModAct : 'E_INSTALAR' };".
        "$.ajax(".
          "{ type  : 'POST' , url     : window.location.href,".
            "cache : false  , timeout : 1000,".
            "data  : PostDados".
          "}".
        ").always(".
          "function (vDados, sStatus, vRetorno) {".
            "bVerifica_Status = true;".
          "}".
        ");".
      "};".
    //
    "var f_Acao_Atualizar_BD =".
      "function () {".
        "bVerifica_Status = false;".
        "var PostDados  = { ModAct : 'E_ATUALIZAR_BD' };".
        "$.ajax(".
          "{ type  : 'POST' , url     : window.location.href,".
            "cache : false  , timeout : 1000,".
            "data  : PostDados".
          "}".
        ").always(".
          "function (vDados, sStatus, vRetorno) {".
             "bVerifica_Status = true;".
          "}".
        ");".
      "};".
    //
    "var f_Acao_Limpar =".
      "function () {".
        "var PostDados  = { ModAct : 'E_LIMPAR' };".
        "$.ajax(".
          "{ type  : 'POST' , url     : window.location.href,".
            "cache : false  , timeout : 1000,".
            "data  : PostDados".
          "}".
        ").always(".
          "function (vDados, sStatus, vRetorno) {".
          "}".
        ");".
      "};".
    //
    "var f_Acao_Limpar_Tudo =".
      "function () {".
        "var PostDados  = { ModAct : 'E_LIMPAR' , Tudo : 1 };".
        "$.ajax(".
          "{ type  : 'POST' , url     : window.location.href,".
            "cache : false  , timeout : 1000,".
            "data  : PostDados".
          "}".
        ").always(".
          "function (vDados, sStatus, vRetorno) {".
          "}".
        ");".
      "};".
    //
    "f_Verifica_Status();".
    "";
  // : Montagem final para a tela
  $sRetornoMod_HTML =
    '<!DOCTYPE html>'.
    '<html lang="pt">'.
     '<head>'.
      '<meta charset="text/html; utf-8">'.
      '<title>'.$sTitulo_Modulo.'</title>'.
      '<style type="text/css" rel="stylesheet">'.
       'body { overflow:hidden; background-color: #FFFFFF; margin-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; font-family: Arial, Helvetica, sans-serif; font-size: 11px; }  iframe { width:1px; height:1px; display:none; }'.
       'table { margin-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; font-family: Arial, Helvetica, sans-serif; font-size: 11px; }'.
       'body,td,th { color: #000000; }'.
       'a:link { color: #333333; text-decoration: none; }'.
       'a:visited { text-decoration: none; color: #333333; }'.
       'a:hover { text-decoration: none; color: #333333; }'.
       'a:active { text-decoration: none; color: #333333; }'.
      '</style>'.
      '<script type="text/javascript" src="./scripts/jquery.js"></script>'.
     '</head>'.
     '<body>'.
      '<img id="img_Plano_de_Fundo" border="0" width="100%" height="100%" src="data:image/jpeg;base64,'.Raw_Imagem_Fundo_1().'">'.
      '<div id="qdr_Tela1" style="position:absolute; top:0px; left:0px; width: 100%; height: 100%; -moz-user-select: -moz-none; -khtml-user-select: none; -webkit-user-select: none; -ms-user-select: none; user-select: none; cursor: default;">'.
       $sQuadro_HTML.
      '</div>'.
      '<script type="text/javascript">'.
       $sScript_Js.
      '</script>'.
     '</body>'.
    '</html>';
  //
  //
}
//
// **
// ** Efetuar download do arquivo zipado da nova versão do ECook **
// **
Function Acao_E_DOWNLOAD() {
  Global $sVars_Global_Pad; EVAL($sVars_Global_Pad);            // Carga das variáveis globais
  //
  $sArq_Download = $sCaminhoTemp.'/ECook_Novo.zp_';
  f_Grava_Status( [ 'Download_Total' => 0, 'Download_Atual' => 0 ] );
  $hArq_Download = FOPEN( $sCaminhoTemp.'/ECook_Novo.zp_', 'w' );
  //
  $vRetorno = ComunicaUrl( $aDados_Atu['URL_ARQ'], [], ($nTempo_Limite_PHP-(2*60)) , 'f_Progressao_Download', $hArq_Download );
  FCLOSE( $hArq_Download );
  //
  if ( $vRetorno[1] == 200 ) {
    //
    RENAME($sArq_Download, $sArq_Novo_Zip);
    //
  } else {
    UNLINK($sArq_Download);
    f_Grava_Status( [ 'Download_Erro' => 1 ] );
    Reg_Ntf_Simdesk( $sTitulo_Modulo, 'Erro ao efetuar download, código HTTP '.(@$vRetorno[1]+0).', Url "'.$aDados_Atu['URL_ARQ'].'"' );
  }
  //
}
Function f_Progressao_Download( $nD_Tamanho_Total, $nD_Tamanho_Atual, $nU_Tamanho_Total, $nU_Tamanho_Atual ) {
  f_Grava_Status( ['Download_Total' => $nD_Tamanho_Total, 'Download_Atual' => $nD_Tamanho_Atual ] );
}
//
// **
// ** Efetuar a descompactação do arquivo ZIP e instalação da nova versão do ECook **
// **
Function Acao_E_INSTALAR() {
  Global $sVars_Global_Pad; EVAL($sVars_Global_Pad);            // Carga das variáveis globais
  $sCaminho_Exc = $sCaminhoTemp.'/Extrair';
  $sCaminho_Dst = GETCWD();
  //$sCaminho_Dst = $sCaminhoTemp.'/Copiar';   // ** Para testes **
  //
  f_Grava_Status( [ 'Instalacao' => 0 ] );
  if ( ! IS_DIR($sCaminho_Dst) ) {  mkdir($sCaminho_Dst);   }
  if (   IS_DIR($sCaminho_Exc) ) {  rrmdir($sCaminho_Exc);  }
  mkdir($sCaminho_Exc);
  if ( ! IS_DIR($sCaminho_Exc) ) {
    f_Grava_Status( [ 'Instalacao_Erro' => 0 ] );
    Reg_Ntf_Simdesk( $sTitulo_Modulo, 'Erro ao criar diretório para extração do arquivo ZIP.' );
    return;
  }
  $oArquivoZip = new Unzipper;
  $oArquivoZip->extract($sArq_Novo_Zip, $sCaminho_Exc);
  $oArquivoZip = null;
  if ( ! ( file_exists( $sCaminho_Exc.'/index.php' ) && file_exists( $sCaminho_Exc.'/callapp.php' ) ) ) {
    f_Grava_Status( [ 'Instalacao_Erro' => 0 ] );
    Reg_Ntf_Simdesk( $sTitulo_Modulo, 'Erro na extração do arquivo ZIP.' );
    return;
  }
  f_Grava_Status( [ 'Instalacao' => 1 ] );
  //
  if ( file_exists( $sCaminho_Dst.'/index.php' )   ) { UNLINK( $sCaminho_Dst.'/index.php' );   }
  if ( file_exists( $sCaminho_Dst.'/callapp.php' ) ) { UNLINK( $sCaminho_Dst.'/callapp.php' ); }
  if (      is_dir( $sCaminho_Dst.'/images' )      ) { rrmdir( $sCaminho_Dst.'/images' );      }
  if (      is_dir( $sCaminho_Dst.'/global' )      ) { rrmdir( $sCaminho_Dst.'/global' );      }
  if (      is_dir( $sCaminho_Dst.'/modulos' )     ) { rrmdir( $sCaminho_Dst.'/modulos' );     }
  if (      is_dir( $sCaminho_Dst.'/css' )         ) { rrmdir( $sCaminho_Dst.'/css' );         }
  if (      is_dir( $sCaminho_Dst.'/scripts' )     ) { rrmdir( $sCaminho_Dst.'/scripts' );     }
  xcopy( $sCaminho_Exc, $sCaminho_Dst );
  //
  f_Grava_Status( [ 'Instalacao' => 2 ] );
  //
  copy( $sCaminho_Bkp.'/ECook_config.inc', $sCaminho_Dst.'/config.inc' );
  UNLINK($sArq_Novo_Zip);
  rrmdir( $sCaminho_Exc );
  //
  if ( file_exists( $sCaminho_Dst.'/autoexe_update.inc' ) ) {
     INCLUDE ( $sCaminho_Dst.'/autoexe_update.inc' );
     UNLINK( $sCaminho_Dst.'/autoexe_update.inc' );
  }
  //
  f_Grava_Status( [ 'Instalacao_Concluida' => 1 ] );
  //
}
//
// **
// ** Efetuar a backup do banco de dados e compactação em arquivo ZIP **
// **
Function Acao_E_ATUALIZAR_BD() {
  Global $sVars_Global_Pad; EVAL($sVars_Global_Pad);            // Carga das variáveis globais
  // Variáveis
  $sNome_Base = $aDados_Atu['NOME_DA_BASE'];                    // Nome da base de dados SQL
  $sDb_ChrCodificacao= 'utf8';
  //
  f_Grava_Status( [ 'Atualizar_BD' => 0 ] );
  if ( ( ! file_exists( 'config.inc' ) )  OR  ( ! file_exists( 'global/db_scripts_sql.inc' ) ) ) {
    f_Grava_Status( [ 'Atualizar_BD_Erro' => 1 ] );
    return;
  }
  INCLUDE 'config.inc' ;
  INCLUDE 'global/db_scripts_sql.inc';
  // Conectar ao banco de dados
  $SQL_BancoDados = MYSQL_CONNECT(DBSql_Host, DBSql_User, DBSql_Pass);
  If ( ! $SQL_BancoDados ) {
    f_Grava_Status( [ 'Atualizar_BD_Erro' => 2 ] );
    return;
  }
  MYSQL_QUERY("SET character_set_results = '".$sDb_ChrCodificacao."', character_set_client = '".$sDb_ChrCodificacao."', character_set_connection = '".$sDb_ChrCodificacao."', character_set_database = '".$sDb_ChrCodificacao."', character_set_server = '".$sDb_ChrCodificacao."';");
  MYSQL_SELECT_DB( $sNome_Base );
  //
  f_Grava_Status( [ 'Atualizar_BD' => 1 ] );
  //
  $sVersao_BD   = SQLVarConfig('VERSAO_BASE_DADOS');
  $nVersao_Mini = Somente_Numeros($sVersao_Minima_SQL)+0;
  $nVersao_BD   = Somente_Numeros($sVersao_BD)+0;
  If ( $nVersao_BD < $nVersao_Mini ) {
    $sMensagem = "Esta base de dados não pode ser atualizada. É mais antiga do que a versão ".$sVersao_Minima_SQL;
    f_Grava_Status(     
      [ 'Atualizar_BD_Erro' => 3 ,
        'Mensagem'          => $sMensagem
      ]
    );
    Reg_Ntf_Simdesk( $sTitulo_Modulo, $sMensagem );
    return;
  }
  // Calcular quantidade de scripts á executar
  $nQtd_Scripts_SQL = 0;
  foreach ( $aScriptsSQL_Versoes as $sVersao_Script => $aLista_SQL ) {
    $nVersao_Script = Somente_Numeros($sVersao_Script)+0;
    If ( $nVersao_BD < $nVersao_Script ) {
      foreach ( $aLista_SQL as $sSQL_Query ) {
        $nQtd_Scripts_SQL++;
      }
    }
  }
  //
  f_Grava_Status( [ 'Atualizar_BD' => 2 ] );
  //
  if ( $nQtd_Scripts_SQL > 0 ) {
    MYSQL_SELECT_DB( DBSql_Bank );
    $sSQL_Query =
      "ALTER TABLE cad_acesso ".
      "CHANGE ACS_APELID ACS_APELID VARCHAR(30),".
      "CHANGE ACS_NOMEBD ACS_NOMEBD VARCHAR(60) ".
      ";";
    MYSQL_QUERY( $sSQL_Query );
    MYSQL_SELECT_DB( $sNome_Base );
    //
    $bInterromper = False;
    $nQtd_Scripts_Exe = 0;
    MYSQL_QUERY("SET AUTOCOMMIT=0;");
    foreach ( $aScriptsSQL_Versoes as $sVersao_Script => $aLista_SQL ) {
      $nVersao_Script = Somente_Numeros($sVersao_Script)+0;
      If ( $nVersao_BD < $nVersao_Script ) {
        MYSQL_QUERY("START TRANSACTION;");
        foreach ( $aLista_SQL as $sSQL_Query ) {
          MYSQL_QUERY( $sSQL_Query )  OR  $bInterromper = True;
          If ( $bInterromper ) {
             $sMensagem =
               "Atualizar banco na versão ".$sVersao_Script.", houve um ERRO: ".MYSQL_ERROR().
               $sPulaLinha.
               "COMANDO: ".$sSQL_Query.
               "";
             Reg_Ntf_Simdesk( $sTitulo_Modulo, $sMensagem );
             break;
          }
          //
          $hInfoArq = FOPEN( $sCaminhoTemp.'/'.DATE("Y_m_d").'_sql.txt','a');
          FWRITE($hInfoArq,DATE("H:i:s").' '.$sVersao_Script.' > '.$sSQL_Query.$sPulaLinha);
          FCLOSE($hInfoArq);
          //
          $nQtd_Scripts_Exe++;
          $nPercentual = round( ( $nQtd_Scripts_Exe / $nQtd_Scripts_SQL ) * 100 , 0 );
          f_Grava_Status( [ 'Atualizar_BD' => $nPercentual ] );
        }
        If ( $bInterromper ) {
           MYSQL_QUERY("ROLLBACK;");
           f_Grava_Status( [ 'Atualizar_BD_Erro' => 10 ] );
           return;
        } else {
           SQLVarConfigG( 'VERSAO_BASE_DADOS', $sVersao_Script );
           MYSQL_QUERY("COMMIT;");
        }
      }
    }
    MYSQL_QUERY("SET AUTOCOMMIT=1;");
  }
  //
  Reg_Atv_Simdesk_Atualizado();
  f_Grava_Status( [ 'Atualizar_BD_Concluida' => 1 ] );
  //
  //
}
//
// **
// ** Efetuar a limpeza de temporários **
// **
Function Acao_E_LIMPAR() {
  Global $sVars_Global_Pad; EVAL($sVars_Global_Pad);            // Carga das variáveis globais
  //
  if ( (@$_POST['Tudo']+0) > 0 ) {
     rrmdir( $sCaminhoTemp );
  }
  UNLINK(__FILE__);
  //
  $sRetornoMod_Bina = 'OK';
  //
}
//
//
//
Function SQLVarConfig($sVarConfNome) {
  $sVar_Conteudo = '';
  IF (STRLEN($sVarConfNome)>0) {
     $Row_Config = MYSQL_QUERY("SELECT * FROM config WHERE VAR_NOME='".$sVarConfNome."';") or die(mysql_error());
     If ($Row_Config = MYSQL_FETCH_ARRAY($Row_Config,MYSQL_ASSOC) ) {
        $sVar_Conteudo = $Row_Config['VAR_CONTEUDO'];
		 }
  }
  return $sVar_Conteudo;
}
Function SQLVarConfigG($sVarConfNome, $sVarConfValor) {
  IF (STRLEN($sVarConfNome)>0) {
    $Row_Config = MYSQL_QUERY("SELECT * FROM config WHERE VAR_NOME='".$sVarConfNome."';") or die('ERRO NO SELECT. '.mysql_error());
    If (MYSQL_NUM_ROWS($Row_Config)>0) {
       $Row_Config = MYSQL_QUERY("UPDATE config SET VAR_CONTEUDO=".SQL_Bin($sVarConfValor)." WHERE VAR_NOME='".$sVarConfNome."';") or die('ERRO NO UPDATE. '.mysql_error().' : '.$sVarConfValor);
    } Else {
       $Row_Config = MYSQL_QUERY("INSERT INTO config SET VAR_NOME = '".$sVarConfNome."', VAR_CONTEUDO=".SQL_Bin($sVarConfValor)." ;");
    }
    return True;
  }
  Return False;
}
//
Function SQL_Bin( $sRecebe ) {
  $sRetorno = "''";
  If ( STRLEN($sRecebe)>0 ) {
     $sRetorno = '0x'.BIN2HEX($sRecebe);
  }
  Return $sRetorno;
}
//
function Somente_Numeros($sStrTexto,$sStrLstChar='') {
  $nCont_Pos = 0;
  $sStr_Retorno = '';
  While (True) {
     $sCharCond = SUBSTR($sStrTexto,$nCont_Pos,1);
	 If (STRLEN($sCharCond)==0) { BREAK; }
	 If (STRPOS( ' 0123456789'.$sStrLstChar, $sCharCond )>0) {
	    $sStr_Retorno .= $sCharCond;
	 }
	 $nCont_Pos++;
  }
  Return $sStr_Retorno;
}
//
Function f_Grava_Status( $aStatus_Info = [] ) {
  Global $sVars_Global_Pad; EVAL($sVars_Global_Pad);            // Carga das variáveis globais
  $sCStatus_Arq = GETCWD().'/'.$sUStatus_Arq;
  Grava_Arquivo( $sCStatus_Arq, JSON_ENCODE($aStatus_Info) );
}
//
Function Ler_Arquivo( $sLocalArq ) {
  $hArquivo = FOPEN($sLocalArq, "r");
  $sConteudo = FREAD($hArquivo, FILESIZE($sLocalArq));
  FCLOSE($hArquivo);
  Return $sConteudo;
}
//
Function Grava_Arquivo( $sLocalArq, $sDados_Arq ) {
  if ( ! $hArquivo = FOPEN( $sLocalArq ,"w" ) ) {  return false;  }
  FWRITE( $hArquivo, $sDados_Arq );
  FCLOSE( $hArquivo );
  return true;
}
//
Function ObterIPdoCliente() {
  If (!EMPTY($_SERVER['HTTP_CLIENT_IP'])) {
     $ip=$_SERVER['HTTP_CLIENT_IP'];
  } ElseIf (!EMPTY($_SERVER['HTTP_X_FORWARDED_FOR'])) {
     $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
  } Else {
     $ip=$_SERVER['REMOTE_ADDR'];
  }
 Return $ip;
}
//
Function Reg_Atv_Simdesk_Atualizado() {
  Global $sVars_Global_Pad; EVAL($sVars_Global_Pad);            // Carga das variáveis globais
  //
  $sReferencia =
    'Atualização concluída com sucesso, versão anterior '.$aDados_Atu['VERSAO_ANTERIOR'].' para a versão '.$aDados_Atu['VERSAO'];
    '';
  $a_Dados_Post = 
     ARRAY(
      'Acao'   => 'REGISTRAR_ATV',
      'CodEmp' => $aDados_Atu['Emp_Codigo'],
      'CodApl' => 25,
      'VerApl' => $aDados_Atu['VERSAO'],
      'DtHr_R' => DATE("Y-m-d H:m:s",TIME()),
      'CodAtv' => 5,
      'CamExe' => GETCWD(),
      'NomOpe' => '',
      'DiaRst' => 0,
      'NomeRd' => GETHOSTBYADDR($_SERVER['REMOTE_ADDR']),
      '_Ip_Rd' => ObterIPdoCliente(),
      'NomeSi' => PHP_UNAME(),
      'NTermi' => 0,
      'Refere' => $sReferencia
     );
  //
  $a_Dados = ComunicaUrl( $aDados_Atu['Simdesk_Comm']['Addr_Get_Comm'] , $a_Dados_Post );
  $atmp = $a_Dados;
  //
}
//
Function Reg_Ntf_Simdesk( $sTitulo='', $sTexto='' ) {
  Global $sVars_Global_Pad; EVAL($sVars_Global_Pad);            // Carga das variáveis globais
  $a_Dados_Post = 
     ARRAY(
       'CodEmp' => $aDados_Atu['Emp_Codigo'],
       'CodApl' => '25',
       'VerApl' => $aDados_Atu['VERSAO_ANTERIOR'],
       'Acao'   => 'REGISTRAR_NTF',
       'Titulo' => $sTitulo,
       'Texto'  => $sTexto
     );
  $a_Dados = ComunicaUrl( $aDados_Atu['Simdesk_Comm']['Addr_Get_Comm'], $a_Dados_Post );
  //
}
//
// ** Funcão que faz comunicação via HTTP, posta dados e captura retorno **
Function ComunicaUrl( $s_Endereco_URL = "", $a_Dados_Post = [], $nTimeOut = 12, $sFuncao_Progress = '', $hArq_Download = Null ) {
  // Inicializa o objeto do componente
  $h_CURL = CURL_INIT();
  $b_Usar_Post = COUNT($a_Dados_Post);
  // Configura
  CURL_SETOPT($h_CURL, CURLOPT_URL           , $s_Endereco_URL );
  CURL_SETOPT($h_CURL, CURLOPT_TIMEOUT       , $nTimeOut ); 
  CURL_SETOPT($h_CURL, CURLOPT_POST          , $b_Usar_Post );
  CURL_SETOPT($h_CURL, CURLOPT_SSL_VERIFYPEER, False );
  CURL_SETOPT($h_CURL, CURLOPT_RETURNTRANSFER, True );
  //curl_setopt($ch, CURLOPT_BINARYTRANSFER    , True );
  //curl_setopt($ch, CURLOPT_HEADER            , True );
  If ( $hArq_Download != Null ) {
     CURL_SETOPT($h_CURL, CURLOPT_FILE, $hArq_Download );
  }
  If ( $b_Usar_Post ) {
     CURL_SETOPT($h_CURL, CURLOPT_POSTFIELDS   , JSON_ENCODE($a_Dados_Post) );
  }
  If ( ! EMPTY($sFuncao_Progress) ) {
     CURL_SETOPT( $h_CURL, CURLOPT_NOPROGRESS, false );
     CURL_SETOPT( $h_CURL, CURLOPT_PROGRESSFUNCTION, $sFuncao_Progress );
  }
  CURL_SETOPT($h_CURL, CURLOPT_HTTPHEADER    , array('Accept: charset=UTF-8'));
  CURL_SETOPT($h_CURL, CURLOPT_USERAGENT     , $_SERVER['HTTP_USER_AGENT']); 
  // Executa a consulta
  $sRet_Dados = CURL_EXEC($h_CURL);
  //
  $nRet_CodigoHttp = CURL_GETINFO($h_CURL, CURLINFO_HTTP_CODE    )+0;
  $nRet_TamanhoDwn = CURL_GETINFO($h_CURL, CURLINFO_SIZE_DOWNLOAD)+0;
  // Encerra o objeto
  CURL_CLOSE($h_CURL);
  //
  If ( $b_Usar_Post ) {
     $sRet_Dados = @JSON_DECODE( $sRet_Dados , True );
  }
  //
  Return ARRAY( $sRet_Dados, $nRet_CodigoHttp );
}
//
//
function rrmdir($src) {
  $dir = opendir($src);
  while(false !== ( $file = readdir($dir)) ) {
      if (( $file != '.' ) && ( $file != '..' )) {
          $full = $src . '/' . $file;
          if ( is_dir($full) ) {
              rrmdir($full);
          }
          else {
              unlink($full);
          }
      }
  }
  closedir($dir);
  rmdir($src);
}
//
function xcopy($source, $dest, $permissions = 0755) {
    // Check for symlinks
    if (is_link($source)) {
        return symlink(readlink($source), $dest);
    }
    // Simple copy for a file
    if (is_file($source)) {
        return copy($source, $dest);
    }
    // Make destination directory
    if (!is_dir($dest)) {
        mkdir($dest, $permissions);
    }
    // Loop through the folder
    $dir = dir($source);
    while (false !== $entry = $dir->read()) {
        // Skip pointers
        if ($entry == '.' || $entry == '..') {
            continue;
        }
        // Deep copy directories
        xcopy("$source/$entry", "$dest/$entry", $permissions);
    }
    // Clean up
    $dir->close();
    return true;
}
//
/**
 * Class Unzipper
 */
class Unzipper {
  public $localdir = '.';
  public $zipfiles = array();
  public function __construct() {
    // Read directory and pick .zip, .rar and .gz files.
    if ($dh = opendir($this->localdir)) {
      while (($file = readdir($dh)) !== FALSE) {
        if (pathinfo($file, PATHINFO_EXTENSION) === 'zip'
          || pathinfo($file, PATHINFO_EXTENSION) === 'gz'
          || pathinfo($file, PATHINFO_EXTENSION) === 'rar'
        ) {
          $this->zipfiles[] = $file;
        }
      }
      closedir($dh);

      if (!empty($this->zipfiles)) {
        $GLOBALS['status'] = array('info' => '.zip or .gz or .rar files found, ready for extraction');
      }
      else {
        $GLOBALS['status'] = array('info' => 'No .zip or .gz or rar files found. So only zipping functionality available.');
      }
    }
  }

  /**
   * Prepare and check zipfile for extraction.
   *
   * @param string $archive
   *   The archive name including file extension. E.g. my_archive.zip.
   * @param string $destination
   *   The relative destination path where to extract files.
   */
  public function prepareExtraction($archive, $destination = '') {
    // Determine paths.
    if (empty($destination)) {
      $extpath = $this->localdir;
    }
    else {
      $extpath = $this->localdir . '/' . $destination;
      // Todo: move this to extraction function.
      if (!is_dir($extpath)) {
        mkdir($extpath);
      }
    }
    // Only local existing archives are allowed to be extracted.
    if (in_array($archive, $this->zipfiles)) {
      self::extract($archive, $extpath);
    }
  }

  /**
   * Checks file extension and calls suitable extractor functions.
   *
   * @param string $archive
   *   The archive name including file extension. E.g. my_archive.zip.
   * @param string $destination
   *   The relative destination path where to extract files.
   */
  public static function extract($archive, $destination) {
    $ext = pathinfo($archive, PATHINFO_EXTENSION);
    switch ($ext) {
      case 'zip':
        self::extractZipArchive($archive, $destination);
        break;
      case 'gz':
        self::extractGzipFile($archive, $destination);
        break;
      case 'rar':
        self::extractRarArchive($archive, $destination);
        break;
    }

  }

  /**
   * Decompress/extract a zip archive using ZipArchive.
   *
   * @param $archive
   * @param $destination
   */
  public static function extractZipArchive($archive, $destination) {
    // Check if webserver supports unzipping.
    if (!class_exists('ZipArchive')) {
      $GLOBALS['status'] = array('error' => 'Error: Your PHP version does not support unzip functionality.');
      return;
    }

    $zip = new ZipArchive;

    // Check if archive is readable.
    if ($zip->open($archive) === TRUE) {
      // Check if destination is writable
      if (is_writeable($destination . '/')) {
        $zip->extractTo($destination);
        $zip->close();
        $GLOBALS['status'] = array('success' => 'Files unzipped successfully');
      }
      else {
        $GLOBALS['status'] = array('error' => 'Error: Directory not writeable by webserver.');
      }
    }
    else {
      $GLOBALS['status'] = array('error' => 'Error: Cannot read .zip archive.');
    }
  }

  /**
   * Decompress a .gz File.
   *
   * @param string $archive
   *   The archive name including file extension. E.g. my_archive.zip.
   * @param string $destination
   *   The relative destination path where to extract files.
   */
  public static function extractGzipFile($archive, $destination) {
    // Check if zlib is enabled
    if (!function_exists('gzopen')) {
      $GLOBALS['status'] = array('error' => 'Error: Your PHP has no zlib support enabled.');
      return;
    }

    $filename = pathinfo($archive, PATHINFO_FILENAME);
    $gzipped = gzopen($archive, "rb");
    $file = fopen($destination . '/' . $filename, "w");

    while ($string = gzread($gzipped, 4096)) {
      fwrite($file, $string, strlen($string));
    }
    gzclose($gzipped);
    fclose($file);

    // Check if file was extracted.
    if (file_exists($destination . '/' . $filename)) {
      $GLOBALS['status'] = array('success' => 'File unzipped successfully.');

      // If we had a tar.gz file, let's extract that tar file.
      if (pathinfo($destination . '/' . $filename, PATHINFO_EXTENSION) == 'tar') {
        $phar = new PharData($destination . '/' . $filename);
        if ($phar->extractTo($destination)) {
          $GLOBALS['status'] = array('success' => 'Extracted tar.gz archive successfully.');
          // Delete .tar.
          unlink($destination . '/' . $filename);
        }
      }
    }
    else {
      $GLOBALS['status'] = array('error' => 'Error unzipping file.');
    }

  }

  /**
   * Decompress/extract a Rar archive using RarArchive.
   *
   * @param string $archive
   *   The archive name including file extension. E.g. my_archive.zip.
   * @param string $destination
   *   The relative destination path where to extract files.
   */
  public static function extractRarArchive($archive, $destination) {
    // Check if webserver supports unzipping.
    if (!class_exists('RarArchive')) {
      $GLOBALS['status'] = array('error' => 'Error: Your PHP version does not support .rar archive functionality. <a class="info" href="http://php.net/manual/en/rar.installation.php" target="_blank">How to install RarArchive</a>');
      return;
    }
    // Check if archive is readable.
    if ($rar = RarArchive::open($archive)) {
      // Check if destination is writable
      if (is_writeable($destination . '/')) {
        $entries = $rar->getEntries();
        foreach ($entries as $entry) {
          $entry->extract($destination);
        }
        $rar->close();
        $GLOBALS['status'] = array('success' => 'Files extracted successfully.');
      }
      else {
        $GLOBALS['status'] = array('error' => 'Error: Directory not writeable by webserver.');
      }
    }
    else {
      $GLOBALS['status'] = array('error' => 'Error: Cannot read .rar archive.');
    }
  }

}

/**
 * Class Zipper
 *
 * Copied and slightly modified from http://at2.php.net/manual/en/class.ziparchive.php#110719
 * @author umbalaconmeogia
 */
class Zipper {
  /**
   * Add files and sub-directories in a folder to zip file.
   *
   * @param string $folder
   *   Path to folder that should be zipped.
   *
   * @param ZipArchive $zipFile
   *   Zipfile where files end up.
   *
   * @param int $exclusiveLength
   *   Number of text to be exclusived from the file path.
   */
  private static function folderToZip($folder, &$zipFile, $exclusiveLength) {
    $handle = opendir($folder);

    while (FALSE !== $f = readdir($handle)) {
      // Check for local/parent path or zipping file itself and skip.
      if ($f != '.' && $f != '..' && $f != basename(__FILE__)) {
        $filePath = "$folder/$f";
        // Remove prefix from file path before add to zip.
        $localPath = substr($filePath, $exclusiveLength);

        if (is_file($filePath)) {
          $zipFile->addFile($filePath, $localPath);
        }
        elseif (is_dir($filePath)) {
          // Add sub-directory.
          $zipFile->addEmptyDir($localPath);
          self::folderToZip($filePath, $zipFile, $exclusiveLength);
        }
      }
    }
    closedir($handle);
  }

  /**
   * Zip a folder (including itself).
   *
   * Usage:
   *   Zipper::zipDir('path/to/sourceDir', 'path/to/out.zip');
   *
   * @param string $sourcePath
   *   Relative path of directory to be zipped.
   *
   * @param string $outZipPath
   *   Relative path of the resulting output zip file.
   */
  public static function zipDir($sourcePath, $outZipPath) {
    $pathInfo = pathinfo($sourcePath);
    $parentPath = $pathInfo['dirname'];
    $dirName = $pathInfo['basename'];

    $z = new ZipArchive();
    $z->open($outZipPath, ZipArchive::CREATE);
    $z->addEmptyDir($dirName);
    if ($sourcePath == $dirName) {
      self::folderToZip($sourcePath, $z, 0);
    }
    else {
      self::folderToZip($sourcePath, $z, strlen("$parentPath/"));
    }
    $z->close();

    $GLOBALS['status'] = array('success' => 'Successfully created archive ' . $outZipPath);
  }
}
//
Function Raw_Imagem_Fundo_1() {
  Return
    '/9j/4AAQSkZJRgABAQEBLAEsAAD/2wBDAAkGBgYHBgkHBwkNCQcJDQ8LCQkLDxEODg8ODhEUDxAQEBAPFBEUFRYVFBEaGhwcGholJCQkJSgoKCgoKCgoKCj/2wBDAQoJCQ4ODhgRERgZFBIUG'.
    'R8eHh4eHyIfHx8fHyIkISAgICAhJCMkIiIiJCMmJiQkJiYoKCgoKCgoKCgoKCgoKCj/wAARCAMABAADAREAAhEBAxEB/8QAGwABAQEBAQEBAQAAAAAAAAAAAAECAwQFBgf/xABAEAEAAQMBBQ'.
    'MJBgMIAwEBAAAAAQIDEQQFEiExUSJBcRMjMlJhcoGRsQYzNELB0WKh4RQWJENTgpKyRKLwB4P/xAAZAQEBAQEBAQAAAAAAAAAAAAAAAQIDBAX/xAAjEQEBAQEAAgICAwEBAQAAAAAAAQIRAxI'.
    'TUTFhBBQhQSJx/9oADAMBAAIRAxEAPwDmoIKAACqCAoqCqCCqCCqCAACgqioCjrZjjnog7wo0g1ANwo0IsIrcA3ANwDcA3ANwDUQo6U8JB6ogG4gGohBrALgFwBgFwDUQDWAWIBrALgGogFBQ'.
    'XAKCgAuAMAzdq3KJq+QPBgGqLVVc4gHstWKbftq6tMdLlqm5HHn3SDy1W5pnEstpgDALgFwBgDdBzqt48ATAGAfG+1l/yezabEc79cRPu08ZB+P3ANwE3BTcBncBJoBiaBHOqgVyqoBzqoByq'.
    'oByqpBxqpByqpByqgHKqAcqoBiQZxnlzB3t7N2he+60t2vwoq+uF9azd5+49dv7LfaG5y0NyI61Ypj+ctfFv6Yvn8f29lr7C7er9OLVr3rmf+uWvg0xf5WHttf/AJ5q5++1lun3Kaqvrutf17'.
    '9sX+ZPp7bX/wCeaCPvtXdr9lMU0/XLf9efbF/mX6e2z9hvs9R6Vu5dn+O5P0jDU8GWL/K8j3WfszsCz6Ggtf7omr/tMtzxZ+nO+fd/69nk9BobVV3yduxbo5zTTFPwjC/5mM/+tXn5r8ttXal'.
    '3X3s+jYo+7t/rPtePyeT2/wDj6Ph8MxP28Lm6gAAAAAAAAAAAAAAAAAAAAAAAPnbU/EaT35+tIP0qggqggqggAoKAACgAqggAoALAKCg72Y7PiDrANQDUA3CiwDcA1AOlKDUKOkINwDUQDpEK'.
    'NxCD02uNIjpgVrANYBcAuAXALgFwDQLEA1gFiAawC4BQXAALgFwC4AB5tVVmYo6cwZt6eauNXCleJ16YiKYxHCFZUAEqoiqMSDzV2pon2dWW2cAuAXAGAXAGAYqt98fIGcA/J/aq75TX02e6z'.
    'R/OrjP6A+LuAbgHkwTcFTcEZmgGZoFcqqAc6qAcaqRHKaM8gWNBrLnoWLlXhTK8qe0bp+z22LnLTVR70xH6tfHpn5cfbrT9j9q1+lNq341Z/wCsL8NZ/sZdqfsPdn73VUx7tEz9Zhr4GL/K/T'.
    'vR9h9nx97qLtXsjdpj9WvgjF/la+o72/sfsGjnZquT/HXLfw5c7/I29drYOxbXoaKz8ad7/tlqePP0xfLv7r2W9PYtfd26KPdpiPo3xjrpGVZUAFEAVRm9etae1VevVbtunnKW8/1c5tvI/Jb'.
    'U2pd1931bFP3dv9Z9rxeTye1/T6Xh8MxP28Lm6gAAAAAAAAAAAAAAAAAAAAAAAAPnbU/EaT35+tIP0oAKACqCAoqCqCCqCCqACACgKKgqioPVTGIiFG0GoBqAaVGoFbQagHSAbgG4BuIUdIhB'.
    'uAbiAdrPPAO8QDQNYBcAuFFQawC4BcAsQDWAXALgGogDAKCguAUADuBxps8d6vjVK8Z664VDAAoC4BJiJ4SDhXa3fBlpnAGAXALgDAGAZqtxz+YPwOtrm/q716fz1zPw7gcdwDcA3Abp0moq9'.
    'G3VPwleHXSnZOuq/wAqY8cQvrWfeOkbB1k89yn45+i+lT5I6R9navz3o+FP7r8bPytx9nNL+e5XV8oX44nzV0p2Ds2nnbmr3qpa9Ix8unWnZez6PR09Hyz9V9Yzd6+3WLNuj0KIp8IiPo0wSq'.
    'MzCozhUZwIzLTKCIoCKqAAKIqjF+/a09qq9eq3bdPOf0hLef7Vzm28j8ntPal3X3cz2bNP3dv9Z9rxeTye1/T6Xh8MxP28Lm6gAAAAAAAAAAAAAAAAAAAAAAAAAPnbU/EaT35+tIP0oKoIKoI'.
    'AKoqAoIKACqCACgAoAKDdEZqiAeqAaBqAahRqBG4RVgHSkG4UbiEHSAbphR0iAbiEG4gHSnhOQemIUawg1gFwC4BcA1gFwDWAMA1gFwCgoLgFBcAoALEAVcOCpWFRQAAAUBAByrtd8ckVjAq4'.
    'BdyroDXkq+gLFioOuWstbuludrEzG7Hx4LxOvzlexdPXxqmrPya9WPdI2To6edGZ9syvrGfeutOi0tPo2qfkvIntXWm3TTypiPBplcAYBMCJMKMzAjOFRJgRmYVGJhRmYVGZhWWZgRlUZVAQw'.
    'oKgIAojF+/a09qq9eq3bdPOf0j2pdc/K5zdXkfktp7Tu6+7mezZp+7t9PbPtePyeS6v6fS8PimJ+3ic3UAAAAAAAAAAAAAAAAAAAAAAAAAAB87an4jSe/P1pB+lBQAVQQFFQVQQVQQFFAQAUB'.
    'RUBRUHWx6WVHpQahRqEGlRqEGxVgHSAbgHSAdIhRuIQdIBuIUbiEG4gHpt8aQdMAoLgFBcA1gFwDQKC4AwDQAKCgoKDUUiNKOU8ZEAAAXAG7ILuSou4C7kAu5AJ5OnugDCAKogK8W06uzRb68'.
    'ZajOnz8NMJNESDnNEwrKYAwBgDCozMAzMKjMwIzhUZmBGZhUZmFRiYVGZVGJVlJVEEFAQUURz1F+zp7U3r1W7RT/9iEt5Fzm6vI/JbS2jf193NXZtU/d2+n9Xi8nk9q+j4vFMT9vHhh1QAAAA'.
    'AAAAAAAAAAAAAAAAAAAAAAAHztqfiNJ78/WkH6ZQQVQAQFGkBQQVQQVQQAUAFAABQd7EdnxB3gG4BqFGhGoRWgapB0gHSAdIB0pgG4UdIhBuIBuAbiAd7PQHaIBQXCioLALgGogFBQaBcAuAA'.
    'UFBcA1FINYVEmOAM7kKi7sAu7AALgDAAKAAABhBAMAA+Xrat/UVdKey1Ga4YVDAG7EiOc0YVEwqGATAMzCozMAzhUZmBGZhUYmFRmYEYmFRmYVGJVlFRFQEFEwI820NpaLZ1jy+sueTonhT3z'.
    'VPSIhNak/LWcXV5H4TV7d1O19r2qquxpqN7yNjp2Z4z1ql4/Jv2r6Hi8UxP29LDoAkwCAgAAAAAAAAAAAAAAAAAAAAAAAAAPnbU/EaT35+tIP0wAKoIAKCgAAoAKoIAKAoqAoqAo9duMUwg2D'.
    'cA6QIsCtAoOkA3AOkA6QDpANwDpANwDcA6QDpRwqUehBQUFBQUGlFxKDURINbsgu6C4BcQC4VGoBQAUGZVAAFAABQAEBQAQAUEFSqrdpmqe7iD40zmZnq25oCgAKOdVOPAZZUQRkGZVGZVGZE'.
    'ZlRmRGJVGZVliVRmVRmREwqGFQEePae09LszSzqNRPsotx6VdXSE1qZjWMXV5H832rtPVbU1U6jUz7LduPRop6Q8etXVfRx45mcjns2P8db/AN3/AFllp9wEABJgEBAAAAAAAAAAAAAAAAAAA'.
    'AAAAAAfO2p+I0nvz9aQfpgFFAQFFQVQQVQQVQQAUAAFABQaojNUQo9cINA3ANiNQK0DUA3AOkA6UqOlIN0oNwDpAOkA3ANwDcUz0B6aaZmAa3JBqKBOruQo1FMILiFGgUFBQUAFBQaAAABFQA'.
    'ABUABRUABQQAUAAHn11W7p5j1uCwr5bTCgAAoIDFVHRU45yrLIIqMyIzKjEiMyqMyqMyqMCMyqIrKYVAHj2ntLTbN00378+yi3HpVz0hNamWsYuryP53tTaOq2lqp1Gonjyooj0aKekPHrVte'.
    '/GJmcjwzCNu+zo/xtv4/9ZEfawCAAgICYBAAAAAAAAAAAAAAAAAAAAAAAAfO2p+I0nvz9aQfpgVQQAUFAABQAVQQAUBRUBRUBR1sR2s9EHpBqAagG6QbBQbgHSAbpgHamirpKjrTZr6B10psV'.
    'HE6602PacOukWaTh10i3T0EdIpp6A6QDUA6UA2KoAKCgoKCgoKCgoKACgAkiUUAEAFAABQAAAAAUAHh2hXmqmjpGWozp45hUQAFAABAYroz4qjlKssqjMgyqMyqMyIzKozIjMqjMqjIgqPJtL'.
    'aOn2dppvXp48rduOdU9ITWuNYxdV/P9pa7U7Q1M6jUTx5U091MdIeTWuvfjEzOR4ppRpzmAddBH+Mt/H6SI+yIAgIKgAMzAIAAAAAAAAAAAAAAAAAAAAAAD521PxGk9+frSD9MCqCAoqCqCCq'.
    'CCqACACgKKgKKgKPTp47OeqDtEA6RbrnlTKnW4sXehxOulOmr6wcOusabrUcOukaaj2rxOulNm30OHXWmijoI60wK3AjcCtwDcA3ANQDcINQDcA1TzB0FUFBQUFBQUFBQUAFABQAZVAFAQAUA'.
    'AFAAAABQAAfL1Fe/eqn28G2K5gkwCAAAAgIDFVOfFUcpjDTDEgzIiSqMqjMgyqMqjMiJhUeXaO0NPs/T+Vu8Z/Jb76pTWuNYxdV+F2hrNRrtRN+/OZ/LT3Ux0h5dXr25zMz/HiqpRpyqpBzmk'.
    'HXQx/i6Pj9JEfWwIgAIKgIADMwCAAAAAAAAAAAAAAAAAAAAAA+dtT8RpPfn60g/TqCACgoAAKACqCACxANRbuTyplTrcae70OJ1uNJc75heHs3Gj61HE9mo0lvvmZOHs3Gns9F4nXst2qKaYi'.
    'KYB1gRoGoFUGoBoHSEGoB0gVuBG4FbgG4BuAahBuAagGgaB0gVoAFBQUFBQaABQUAAFBmRBQBUAAFAABQAAAAUAGbte5bqq6Qo+Q0woAJMAgAAAMqIiM1REqjjVGGmWFGRGZVGRGZVEEZwqPL'.
    'tDX2NDY8rd41T6FHfVKa1xrOLqvxWu1d/W35v35zV3R3Ux0h5revZnMkeSaUac6qQcqqQc6qQdNHH+Ko+P0kR9TAjMggAICCoACTAMgAAAAAAAAAAAAAAAAAAAA+dtT8RpPfn60g/TqCAoqCq'.
    'CCqLRRv1bqD0RpOtTXGfZqNLb78nDrcWLXqrxOtRbojlTANwqKgKKCoCjVMZqiAepBqAaBQagVQbpBuEHSAbgVuBG4FbgG4BuAahBuAagGgUV0oBoFBQUFBQUFABQAUFABgQBQAUAFAABQAAA'.
    'BVEAebX14tRT60/RYlfPaZVQQAJgEBAQEBFRkEmMiONdOPBpmxzVElUZEZVGQeXX6+zobPlLnGqfQo76pTWuLnHs/H6zVX9Xem9enNU8o7ojpDz29evOZHmmlGnOaQc5pBzqpByqpBvSx/iaP'.
    'j9JEfREQGZgEABMCoCAAkwCAgAAAAAAAAAAAAAAAAAAPnbU/EaT35+tIP04AKoqAoIKo66WPO/AiV7G2AFQVRUAFUEFUAdbEdrPRB6AaBRWgaBYBqAdIQdIBuFVuEG4BuAbhEbhVahBsGgUFF'.
    'bp5g2CgoKCwCgoKACgAoAJUCCAKKAogCgAAoAoIAoAAr5+urze3fVhqMV51QAAAABlREEBFGREBJEca6McYaZsc5aZZkRBHk1+us6Kz5SvjVPoUd9UprXGs56/JavU3tVem9enNU/KI6Q4W9e'.
    'rM488wjTEwDEwDnNIOc0g51Ug1pqf8RT8foI94jIICSCAgJgEFQAEwCAgAAAAAAAAAAAAAAAAAPnbU/EaT35+tIP04CioKoIKADvpI7VXg1E09TTCgIKoqAooKgKKDvYjs56oO0AoNQK1AKDU'.
    'A1AOlKDpCq3EA3CDcA3AjcCtwDUINQDQNCqCg6goKCgoAKCgAoAKADM8xAAFAFUAFEBQRRQQAFUAQFfIrq366qus5bYQQAAAUECVGJQQRJUZBAQRAcq7fRqVmxxlph5ddrrWjtb9fGufQo6pd'.
    'caznr8pqtRd1N2bt2c1T8o9kOFvXpk44zArEwgzMAxMCucwDE0g5zSC2I8/T8foI9kwImAZBATAICAYFZABAAZwCAAAAAAAAAAAAAAAAA+dtT8RpPfn60g/TgKNICggqgg9OkjhU1GdPQ0yqC'.
    'qKgAqgCoCig9VEYpiEG4BoVoFBoGgagG4B0pFdIQbgG4EbgVuAahBuAagGhVEUVQdKOQNgAoKCgAoAKCgATwgGFRUAFAFUAFAEUAUEBVEABXLVV7liqe+eEfFUr5bTCgAAAKCACKMCIDIIDIi'.
    'KCI8utvUWbc1c7n5aesr7cPTr8hq7t+9fqrv/AHnTp7Icreu8nHnmEVlRmYBmYQYmAYmFViYQYmkCzT52P/u4R6hEmAZwCSDIJMAgIBgEFQEABmYBAAAAAAAAAAAAAAAAfO2p+I0nvz9aQfpw'.
    'UFAABQAevSx5v4txmu6siCqKgKKCoCgDVMZqiAeuEGgagVYBoFgGgbgG4QbgHWBW4BuBG4FbgGoQbgVqBFFaEBVB0oBsFBQAUFABQAUAGahEBRVEAUAUBQAUAAAFAAB49oV+jR8VjNeNpkABQ'.
    'AAQAGVRAZkGQQEEZBx1OposUZnjVPo0lqzPXxrt2u7XNdc5mXN2keXUaei9HHhVHKpB8q7artVbtUcVGEGQZwozMIMTCqzMIMTAJbjzkCPQIgJIM4BMAgJgGcAgAIKgIADMwCAAAAAAAAAAAA'.
    'AAA+dtT8RpPfn60g/TqKgqggqggqj2af7qGoxXUQUaQAVQBUBRQdLEdvPRB6YBoVoFBoFBqAbgG4QbgHSkHSAbgVuEGoBuBWoBqAagRRVgGoEUV0BQUFABQAUAFABzEUFBQAUAVQAUAAAFAAA'.
    'B8zV171+r2cGoxXJUAUAAAEAUQRkEBmQZBAcNTqKLFGZ41T6NJbwk6+PduV3K5rrnMy5uznIMg53bVF2ndrjwlB8vUaauzVx9HuqBxURBmYUYmEGZgGJhVKI7cIjsIyCAgJIMzAICAzgEABAQ'.
    'VAASYBkAAAAAAAAAAAAAHztqfiNJ78/WkH6gFAABQAVR7rUYt0+DTFbEVRUAFUEFUAUHosR2Znqg7A1Aqg0CwDQNQDcA3ANwg6Ug6Ug3ArcINQDcA1ArQKI1gVoFEAdKeQrQAKACgAoKADNQI'.
    'qCCgoAKKAoAKAAACgAAlVW7TNXSMiPk5zxaYQBRQAAAQEUQRJBAZESYB59TqKbFPHjV+WlLWpOvkXblVyqaq5zMubq5yDIMgKM1UU10zTVGYnuQfM1Wjqtdqnjb69PFR5gSYQZmFGZhBiYApj'.
    'tQDoIgMgAyCTAMggICYBAQEBBUABJgEBAAAAAAAAAAAAfO2p+I0nvz9aQfqAVQQVQQVQB9CnlDTmqigqAooKgKKAD124xRCDoCitQCg0Cg6Qg1CjcA6QitwDcA6Ug1CDcA1ANwCwDcQCgoKCg'.
    '1SDYqgAAoKACgA5qigqACgCqACgAoAAAKAADhrat2xj1uCxK+c0wAoAAAAIoiCKiAyCCOd69Tap/i7oFkfMvedneq9Lqw6R5a6ZpnEo0xKDIMgAKCD5+q0O727Xo99PTwB4gZwDMwozMAkR2k'.
    'GxEBAQEBAZwDIICAkwCAgIKgAICTAJgEAAAAAAAAAAB87an4jSe/P1pB+pAABQAVRaYzVCD6DbmqioAKoIKoAoNUxmqIQewFgVoGgWAaBYBuAbgG4QdIFbgRqAdIFbhBuAagG4gG4BQUVRAGg'.
    'WBWwUAFABQAUGagZVFQUAFAFUFABQAAAUAAAHi19eblNHSPq1Ga8oyAKAAAAICKIIkgyDnevRaj+LuhLSR8+uqqqreqnMsujAM1UxVGJB5bluafDqjTnKCAAAKCDx6vQxX27Xpd9PUHzZiYni'.
    'omEGVExxQURATAICAgIDMwCAyCAkwCAgAIKgIADMwCAAAAAAAAAA+dtT8RpPfn60g/UqCCqCCqAN2vvKfFIle5thVFQFFBUBRQAdbEZr8EHpBqBWoBQagFBqEG4UbhBuBXSBG4BqAbgV0pQbg'.
    'G4gGwaABRVEUFBQbp5CqCgAoAAKDE81RAVBQAUUBQUAFAAABQAAAfLvV792qr2tMsCAgoAAAAgIogJIjlevRbjrV3QnVkfPrqmqd6ebLbIIDMiJMRMceSjzXbM08Y9FnjUrkigAAIoA8+q0dN'.
    '6N6OFzr18UHyq6KqKppqjFUKMoIAIgICAgJgEBATAMyCAgM4BAQAEFQEABmYBAAAAAAAAAfO2p+I0nvz9aQfqVBBVBBVBB108edhYle1thUAFUAUAFBQd9PHZmeqDuK0CwDQNAsA1CDdKjcIN'.
    'wK6QI3ArcA1ANxCDrTCjcAsINAoqiANACqDVANAoAKACgkzwBhUEFBQUAUBRFFUAAAFAAABm/VuWqqvYD5LTICiCoAAAAgIogjleuxbp/i7oTqyPBVM1TmebLbMisiICKiAA893T/mo+Scalc'.
    'WVAAAQBRy1Gnov04q4Vd1SD5N6xcs1btceE9QcgQQBAQEABkEBATAMgmAQEmAZwCAAgqAgAJMAyAAAAAAAD521PxGk9+frSD9SACgAqgg76WPOT7IWJp622FQFFBUBRQAVB67UYogHSAWBWgW'.
    'AaBoGoBuEG4FdIEbgG4FagHSmAdIEbgVpBoFBRVEWAUFAFWOYOgAAKACgxVPFUQFAQUFAFUFEBVAAABQAAUHl19eLdNPWfosSvAqAKAIKigAgICKjlevRbj+LuhFkeGqZqnM82W2AQEkEVEBA'.
    'AURxvafe7VPpdE41K8uEaAAAAAYu2qLtG7XGYQfI1WkrsT1o7qgcBEABMAgAICAyCAgJgGZBAQEwDIAICCoACTAICAAAAAA+dtT8RpPfn60g/UgqggqggA9OkjjVLWWdPUrICqAKgKKADVMZq'.
    'iEHtBoVYBoFgGoBYBuAbhBuAdIBuAbgV0pgRuAbgGoFbgGkAFBRVEUFAFUG45AoKAABIMKgCoKACgCqCiAqgAAoAAAKD52tr3r+PVjCxK86ooAAAKrKAAijleuxbj+KeUISPDVM1TmebLozII'.
    'IgIIiiAgAKIKOd2xFfGOFXVOLK8lVM0ziebDaAAAgCiVUxVTMVRmJ5wg+Vq9BNvNy1xt98d8CPICAAkwCAAgIDIICAmAZwCAgJMAgICYBBQEBJgEBAAAAAfO2p+I0nvz9aQfqQUAFUEAHr0kd'.
    'mZ9rUZr0KyAqioCgCgqDrYjt+APVAqg0CwDQNAsA3CDcA3AOkA3TGQdYhRuEGoBqAbgVoGoQUVRAFBQUUBQaoBsAAFBiqe4EVAFQAUFBQBVABQAAUAAFA5RnoD5FU71U1dWmUAQFFEQAVREVH'.
    'K7di3H8XdAsjxVTMzmebLTIqCICAyqICAAAogAozctU3I48+6UV4q7dVE4q+bDbIAAAAMiPBrNn87lmPGj9gfOABATAIACAgICAyCYBMAzgEBMAgIADIoCAgJgEAAAB87an4jSe/P1pB+qUEF'.
    'UEAFB7NLHmvi1GK7KgooKgKKACoPRpo4TIO4rUAoNQCwDQNQg3ANwDpAOlNKjrANQg3ANQDUA3Aqg0CoKCgoqiAqgAtPMHQAFABzVABBQUAFBQBVABQAAUAAFBx1Ve7Yq6zwCvmtMiACqgCCg'.
    'Ajncubsfxdx1ePHVMzOZ5orIICAgMqiAgIAIAAqgADNVEVRieSK8d2zVbn+HulnjUrCKAAgAiA8ms0EXu3b4Xf5SD5VVNVNU01RiqOcAgIADIAICAmAQEBnAIDOAAZkEBAAQVAQAGZgEAAB87'.
    'an4jSe/P1pB+qABVBABQe6xHmqWmK6KiqCCqAKCoCj2WYxRCDoK0CwDQLANQDUINwDpTAOtNKjpAjQrcINA3ANQDUCtQCoLAKCgoKKAoAAOkAoKDNUgyqAKgAoKACgCqACgAoAAKADx7Qr9Gj'.
    '4ysSvGqCCqAgCCgMXLm74g805nmy0zMAxMKjIICAioyCACICgKAAAAExExieQPJesTRxp40/RixuVxRQCQQQAB59VpKNRHS5HKr9wfHu2rlmvcrjEgyCAAgICAgJgEBATAMgmAQGZBMAgAIKg'.
    'IADMwCAA+dtT8RpPfn60g/VAqgAgAoPoW4xRTHsbYaVFBUBRQAVBYjMxHVR7oQagVQagFBoGgagHSmnIO1MYEbgG4BqBW4QagGoBuAagVQVBQaBRVEBVAAABugGwAc54yqACIoqgAoKAKAoAK'.
    'ACgAoAAPmamvev1T04R8FZcwBBQAFQGble74oPPPVGmQZBAZmFRmQZVEBAQEEAAFAFQFEAAQee9p/zUfGEsaledlokGRAAAHO/Yt36N2uPCe+AfG1OluaerFXGmfRq7pByBAAQEABMAzIICAm'.
    'AZBMAgIDIIACCoCAAkwDIPnbU/EaT35+tIP1QKoIAKCg+i25qoIKoAoKgKOunjNzw4g9aKoNAoNQDUA1AOtFHUR1gG4BqAbgVqAahBuAagGoFagFQaABQaBQBVAABQap5g2CVcgYVABBQUAFB'.
    'QBVABQAUAAFABK6tyiqrpAPkNMqIAAIooxXXu+KDhMo0yCAgIIyozMAyqMggiAKAAAAAAAIAgA43rG92qfSTjUryzE8mWkEAAAAZuW6LlE0Vxmme4Hx9Zoa7HajtWuvTxB5gQAEwCAAgIDIIC'.
    'AkwDOAQEBmYBAAQEFQAEmAfM2p+I0nvz9aQfqlFAQAUGqIzXTHtUfQbc1BUBRQAVBVHo0scJlB3gVoFgGgaBqIyDrTTgR0gG4UahBuAbgVqAahBqAbgGoFaBUFBQUFgFFUAAAFAB0BmrmqIAI'.
    'oqoAKACigKACgAoAAKADz62vds49acCPA0ggAAAxXXu+Irj4oqAyCAgIqIDIMyDKogICCKAAACKACCCgAAOd61FcZ7+qVY8c0zE4llQAAAAEmImMTGYnnAPla3Z0283LPGjvp74B4AAASYBAA'.
    'QEBAZBATAMggICYBAQEwCAgoD5u1fxGk9+frSD9SoIAKADpYjN2lYle9tgQUBRQUBBVHss04twiukA0Cg1AN009RHWFGoQbgG4BqAbhFahRqEG4BqAbgVqAVBYBQUFBQWBVAAABQAbieAMqgg'.
    'AoKACgCqACgoAAKACgAA8Ouqzdin1Y+qxHmEAAAZrr3fEVwRQEBAZBBEUQGQQEkRmVGQBAAAAEFBAAAEFASr0UpHKqiKo4stPPVRNMgyAAAAAD5+t2bFWbtiMVd9HXwB8vExOO8AEBMAgAICA'.
    'gJgEBmYBMAzIICTAICAmBUAB83av4jSe/P1pB+oUEAFAUdtLHnfgRK9rbCoCgCgqCqERmYjqD3xCK0CwDUQDrTTgRuFRoVqEG4BuAagG4FaQagG4BqAagVoGkFBQAUFFURRQAFAAA3u1uqigI'.
    'KACgAoKAKoAiigAKACgAoPlXat+5VV1lWWAAAZrrx4iuKKAgICAgjKiAgIDIICAzKoioAAAAIIKAAAAgJV6KVY5sqkxExiQcK7c0+AM4AwBgDAGAAeTW7Ppv8Abo7N3r3T4g+NXRXbqmiuMVR'.
    'zgEBAAQEBAQEBAQEmAZmAQGQSQQEAwCCvm7U+/wBJ7/60hH6cAFAAB6dJHbqn2LlnT1NsqgKKACoKo6aeM3PBB7IFUG6aZkHWIiFZaBpBYVW4QbgGoBuAagVuEGoBoG4FagGkFBQUFABQUFAF'.
    'AUAFBw3u1lph3ZaUAFABQAUAFFAUAAFABQAYv1blmqe/HAHy1ZAAZrrx4iuKKAAgICAgiKMoIogMgkgyIAmARQAAAEBQEAAABmv0UqxzZUABxrt44xyBgAAAAAHn1WktamntcK49GoHxL9i5Y'.
    'r3LkYnununwBgEABAQEBAQEBAQGcAmAQGZgEwCAA+dtOPP6T3p+tIr9KACgKKg9Ojj0pajOnqVkUAUFQFFB6NLTwmfgg9MCulNvvn5COio0CwCorUCNwK3ANQDcCtQg3ANQDUA3ArUAsIKCgo'.
    'KCgAoKAKoAAM3J4YWM1zVHa3PZRWkUBQAUAFBQBQFAABQAUAHm19XZpo68fkRK8KoAzXXjh3iuKKAAAAgjKqiIgMqICAyDIgKiggAkqiAAAAAgAAAM1ckqxhlTAGAMA5V2u+n5A5AAAAAA53r'.
    'Fq/b3LkcO6e+PAHxNXo7mmqxPGifRrBwBAASQQAEkGQQEwCAzgEkEBAZwCA8G0/v9L7360ix+jBQAFFQevSR5ufFqM6ehWRRQAVBVAHt09E7kRHig9VNEU+Ko0CgoNIKqtQiNwK3ANQK1ANwg'.
    '1ANQDcCtwCg0goKCgAoKACigiigKDjVOammKgN2p44RY7IoACgAoAKAKoAAKACgAoPnayvevz/DwVHARiuvHDvFckUBQAARREGREUQEBkGZBFGQQAAABBFRAAAAAQAAEnklWMMqAAAgMV2s8Y'.
    '5g44AAAAABmuiiumaK4zTPOAfG12z69P26O1Z/nHiDxggAJMAgAICAyCAgJgGQQEBmQeDaMef0vvfrSLH6IFABQAe7TR5qGoxXVpAFBUBRQdLVma5juiROvqU0xTGI5AqioANQCoqwI3ArcA1'.
    'ANwK1ANwg0DUA3ANQK0goKCgoKACgoAAqgAlc4pEri0yoLTwnIPQy0AAoAKACgCqAACgAoAEziM9OIPkzO9M1dVZc668cO8VyRVAABQQEBBEUZkEBkEBkEUZBAAAAEAEBFQAABAAASeSVYyyo'.
    'CAAAAxXbirxBxmJicSCAAAAAYzGJ5A+Trtmbubunjs99HTwB80AAEmAQAEBAQEBAZmAQGQQHh2hHn9N7360ix98FAUVAUfQsxi1T4NRitqigAqCxGeSj0W7GONfPovGevRZjNyPYI9QoiqACg'.
    '0KsIjcCtQDcA3ArUA3CDUA1ANwK1ALCDQKAoqCiqIAooICgKDncnM+CxmsqgCg7UTmlGmkVRAAFBQABVAABQAUFBx1de7Yn+LgJXyq68cI5qOSKoAKAACAgIqIDIMggIDMgyCAioCgCAAAACK'.
    'iAAAgAJVySrGGVUEAAAABmqmKgcaqZpkEAAAAAB8/X7Mi5m7Z4XO+nun+oPjzExOJjExzgAEABkAEBAQEBAZwCAzgHj10ee03vfrAsfdABQAAfSp9GPBtzVRQVBu3bqr5cuqo9VFqmjlz6tM9'.
    'aEdtNHOUV2FEVQUFRVUbhBqAbgGoFagG4QagGoBuAagGoRWlFQUFUVABQUAUABQSqd2MiOLTKgA0Ddue5FjojSiAKACgCgKACgAAoKD5+072Jptxz5yI+eKAoKAAACCICAyCKIDIIDKiSDIIi'.
    'AooIAAAAAJhUQAAAGauSVYyyoAACAAAAkxExiQcqqJp8AZAAAAAB49ds+jUxvU9m9HKrr4g+JctV2q5ouRu1R3AyCAAgICAgJgEBASYBkHj1kee0/vfrAsfbAUVAUajnEIPoujmoAPRa001ca'.
    '+EdDjNr04iIxHCGmQEB6bMYtx80abRVABQUVqAahBuAbgGoFaBuEGoBqBWoEbgVqAaBUBRUFBQAUAUABQcr1X5WozpilWWkVQUGqeEiurKqCgAoAAqgAAoAAKBlB8TVV+U1FdXdnEfBRzBQUA'.
    'FAAEZFQRAZUQGQQEBmQZURAABAAAAAAAAQEVABBKuRVjDKgAAAIAAAADlVRjjHIGQAAAAAefVaO1qaMV8Ko9GvvgHwtTprunr3LkeFXdIOQIACAgICAmAQEBMA8uqjz1j3v1gWPrgoAAOlqM3'.
    'KfFYV723NqmiqucUxmQey1pqaONXGr6NcYtdlZZRQE5zgHt5MtAqgAqKqjUINQDcA0DcCtQg1ANwDUCtQI1ArcAqCgKKgoKCgCgAKB7RHmmczltgBuEVQUFB2pnMI0qCgAoAoCgAAoAKCTIOd'.
    '2vydqqvpGUHxFFBQUFAAEQEBJVUEZBAQGQQGZBlRAEAAAAEAAAAAABBEBKuRVjDKgAAAAAAIAADnVR3wDAAAAAAOd6xbv25t3IzTP/wBwB8LWaG7pavWtT6Nf7g8wIACSCAAgMggIDz6iPO2f'.
    'e/WBY+ooqAoqDpp/vqViV9Szp67vHlR1dOOdr3W7dFuMUx8WnNQRBkUBqzGbkewV6kVUUABRWoBqEGoUahBuBWoBtBqAbgGoBqBWoBoFQVRUFABQUAUABQc71XDHVYzpyaZAaBtFAUHS1Pcix'.
    '0RQVRAAVQAAUAACZQRR5NpV7tmKfWn6A+YDQKCgAoIADIiKIDMggMggMggIDIAAAAAIAAAAAAAgmFGauRSMMqAAAAAAgAKCAAxVRnlzBzAAAAABmqmmumaaozTPOJB8XX7MqsZuWu1Z/nSDwg'.
    'gAJMAgAJIIDION6PO2fe/WBY+iCgA1ETM4jmD6mz9mzTV5S/04Ufu6Zy5b2+o25oCAyKiCA76aOcpVdxRFAUFFWEGoBuAagG4FagG4QagGoFbgRqBWoBoFQFFQUVRAFFBAUBQeeuc1Zac6iig'.
    'A1CDYoDVE4qFdmWgRQBQFAABQASZBEFUfM2lXvX4p9SPqDywCgoKCgCAIDIIoiDIMqIDIIDIIAACAAAAAgAAAACAACbu9wBzmmaZ4oqAAAAAAAgAAAAM1U58Qc5iQTAGAMAYAwBgHydfsrnd0'.
    '0e2q3+wPlggAJMAgAICA5XI87a979YFj3gKOun092/Xu24z1nujxOdS3j7Wl0NrTRn0rvfX+zpJxx1rr00tMtAgIDKKgID1WYxbj28UadBVQABVgGoQagG4BqBW4BqEGoBuAagGoFbBoFhBVF'.
    'QUAFBQABQFBm5VinxWJXBpgBQUFBqEVQUHaJzGWWlBQBVAAABQSZBEFUAfEu1+UuVV+tIMwCgoKCiAAIDMqIgzIMyogIDIMggIACAAAAAAIIoCgggAAAtPMGppieaK4125p8AYAAAAAAABAAA'.
    'ASYiQc5jAIAAAAAD5+v2XTezds9m93x3Vf1B8WqmqmqaaoxVHOJBAQEBAAQHOqPO2veFj2g92i2Xcv4rudiz/OfBuZY1vj7Nu1btURRbp3aYdHHqyBR3g0CAgMoqAc+APbjEYRpUUABQWBWoQ'.
    'agGoBuAagVuEGgagG4BqBWoBpBoBRUFFUQBRQAAFBwuzmrwajFZVFABQUAG0VQdLfRGo6IoACgAAoJMgyCoKo5auvc09c9+MR8QfHEUVQUFEAUEFZEQVlUQGQQGQQGQQEAAABAAAAEAAAEUEA'.
    'AFp5g2igOVdrvp+QOQAAAAAAAAAIABgHOaceAIAAAAADya3Z9vVU59G9HKv9JB8C9ZuWbk27kYqgGQQAEBAZmPOW/egWP0mi2TRbxc1Haud1PdH7uucOOvJ9PotubKDMitU8gUEBAZRUBuzGb'.
    'keziK9aKIoCgoqwg0DUA1ANwK1ANQg3ANQK3ANQDUA1CCgqioAKCgACgKCVTu0zKo87TACgoKAADUIrQNUT2kWOyNAAKAACTIICgIKo8O1K+zRb69qQeCBFBQUFBQQVBEFZUQRJBkGQQGQQGQ'.
    'AAAAAQAAAABBFAAURAFp5iuiAADFduKvEHCqmaeYIAAAAAAAAACAoOdVOOQMgAAAAA46rSWtTb3bkcfy1d8A/P6vSXdLXu3OX5ao5SDiCAAgJjzlvxFfoNl7Q38ae9Pb/JV19ni6Z047x/19J'.
    '0c0lFZkGqfRBQQGUEFQHbTRzn4JVj0DQgoAKitAsA3ANQDcCtQg1ANwDUCtQDcAsA0gqioKCgAooICgKDleq7moxpzVFABQUAFABuEVQd44stAqgAAkyDKCqKCgoPka6vf1NXSnsg4iKoqKCK'.
    'oqCCoIgrIiAzKiSDIrIiAyKggAAAACAAAAAIAIoAIAq08wdEAFBASaYmMSDhXbmn2wDAAGAMAYAwAAAAAADFVHQGQAAAAAYu2bd6ibdynepkHwNfs65pZ3o7VmeVXT2SDyAgAJTHnKPGBXogH'.
    '2tna/y0eSuz56OU+t/V1zpx3nj3NMMyDfcADIIggqA9ViMW49vFGnQVUAFBUVQagG4BqAahFbBqAagG4FaBqAaBUFUVBQUFAAAFAWZxGRHmmczltgBQUAFABQUFgGkV1t8kajaKAAkyDKCqKA'.
    'CgVVRRTNU90ZB8POZmZ5zxEFFQVRQEFBBUBAZkEBkGZVEkGZBkVBEAAQAFAAAEAAAAQAARQFWn0kHRBQAQFABxuWu+n5A5YA4gAoIAAAACYkAAGaqcgwAAAAACVU01RNNUZpnnEg+JtDZVVnN'.
    '2x2rXfT30/wBAfOBAWn7yjxgV2BYmYnMcJjlKj7eg10aijdr4Xqeft9rpnXXDWePTLTLoADIIggqewHuiMRhGlRQFARWgUGoBqAbgGoRW4BoGoBuAagVoGkFUVBQAUFAFAAUHO9PDHVYzXJpk'.
    'BQUFABQAUFBaRXSieLKx1RoBJkGQUAFBQUHm2hXu6eY76pwD5YgoqCgqioIAKgIIzIMyqoIyCAyDIICAAIAAAAIoCggAAAgAAAU+kK6IKCAoAAAMV24q8QcZiYnEggAAAIAAAACAAkxkGMAAA'.
    'AAAA+TtHZGc3tNHHnVb/YHxwWj7yjxgV1ABqiuqiqK6ZxVHGJB9vR6unU09LkelT+sOsvXDWePY0yAyCIIK3ZjNyPmK9aKIqgAoqoKDcA1ANwDUIrUA3ANQDQrUA0DSCqKgoKACgACgKDz11b'.
    '1WW3NAUAFBQAUFBQAUGqZRXdltJkGQAUFABQUHztp15uUUerGfmFeNUVBQAVRUEAFZAEZkGZBlVSQZEQGUVFRABREAAAARVAAABAAABABafSB0RUBcAoIAAACTTFUYkHGu3NPgDAAAAAIAAAA'.
    'CAYgGJjAAAAAIADwbR2XRqIm5axTf/lV4g+FuVW78UVxu1RVGYkV0UVAUdtLVVTfoqp4Tkia/D79q9TdpzHPvh1cLGlRARBBXbTRxmfglWPSKIoADSKoLANQDcA3ANQitQDUA3ANQK1ANQgoN'.
    'AoAKCgACgKDNyrFPisSuDTACgoKAACgoKCgAsA6U1xMcO7mxW4oqgAoAKACg+NqK/KX66u7OI+AjmCgqioCioICCoCAzIjKqiDKiAyiICAigKCCAACKAAAoAAAAAgCLT6QrogAoAIAAACgA41'.
    '2u+n5A5AAAAgAAAAAAIDMxgEAABAAAfN2p/YKt3yteNRTMbu7xq8J9gr5KioCjtpY89BEr30V1UVb1LbFfQt3KblO9HxhtzUREVAerT04tx7UV1RVFQFQUVQagGoBuAagVpBuFGoQbgVqAagG'.
    'kFgFBQUAFAFAAUHC5VmrwajFZVFABQUAFBQAUFBQcL178tPxlGpF0lWKpp6stPWCgAoKACgxfr8nZrr6QD4qooCCqKACoICCoCCMgkgzKjMioIyCIICKAAoAgAAAKIAAAAAAgAtHpA6oAAAAA'.
    'AICgAAxXbirxBwmmY5ggAAAIAAAAAADNVIMgAAxdu27VG/cq3aY75B8XW7brrzRpuxR6/5p8OgPlxPnaJn1v1FekABR6NJHbnwWM6explu1cqt1Zj4wJx7aa4rjejk0wAA98RiIjojSooAAgo'.
    'rQNA1ANwK1CDUA2K1AjQrcA0CoNAoAKCgACgKCVzu05VHnaYAUFBQAAUFBQUAHG9e/LR8ZRqRwZabondqiegj6ECqCgoAAKDybSrxapo9afoD5qoqCqAKAgKIggqAgIIyokgygzKiAyAgAigA'.
    'AigAAACgAAACAAAtHpIOqAAAAAAAAAAACVUxVGJBwrtzT4AwAAAAAAAAACAzNPQGQfP1u2LFjNFrzt3/wBY8ZB8LUaq9qK9+7VvT3R3R4QDkCZ85R4wK9YCig9Wj/NKxnT0tMgOlq5NufZ3wJ'.
    'Y9kTExmOTTDdmM3Y+Yr2ooigAKKqCwDUA3ArUA3CDUA1ANwK1ANQDUINAoKCgAoAoACg5XquOGoxpzVFABQUAFBQAaABwvXvy0/GUakcWWlgRoHtsVZtx7OArqCgAAoAPmbQr3tRu+pGCI8yg'.
    'CgAoACCCoCAgjKiCsoiSDKjIqCAACACKAACKAAAAKAAAAIC0ekg6oAAAAAAAAAAAAAONdrvp+QOYIAAAAAAAADlqNTZ09O9dqx0jvnwgHw9ftG/qY3Lfm7fSOc+Mg+VPDgCAAxM+dt+Ise0BR'.
    'QevSR2Jn2rGNPQ0igA6Wru5P8IlfR0kZzX3dysvUKIoCgIrQLANQDcCtQg3ANQDUA0K3ANA0gsAoqiKACgCgKBM4jIjzTxnLbACgAoKADQAKCg4Xr35aPjKdakcWWlEUGgejSzxmkWPSCgAoA'.
    'HLjIPiV1b9yqv1pyqICgAqAoAIMioCAgIDIIDMqIDIIAIAIAAAAAIAKAAAAKAAALT6RR0ZAAAAAAAAAAAAAAGK7cVeyQcJiYnEgAgAAAAE4jjPCI7wfM1e2Kac0abtVevPL4dQfJuXK7lU11z'.
    'NVU98gwDFdEVeIPPVE0ziQZBzrnztr3v1gWPoKKCiPbpY81HxajNdVRQABH0tDVuWozyq4oce1oEFBRRBQagGoBuAahFaBqAbgGoFagGoBoGkFABQUAUABQc71XDCxnTk0yAoKCgAoKCgoOF6'.
    '9+Sn4yjUjgyrQKCg0o3bndriQe1FUBBQFHHWV7mmr6z2Y+IPkqgCgAqAoAiCCoCCICCsgzKiAyCAgAAACAIAAAAAgAoAAAAAotPpFHRkAAAAAAAAAAAAAAASaYq4SDjXRNPh1BgAEBQebVa6x'.
    'po7U5r7qI5g+Lq9ff1PpTu2+6iOX9QeYEABAZqpiqMSDzXKKqJ4/MHnuz521736wLH01FBQe+xGLVPg1GK6KgAIsIPp007tMU9Bp2t144TyEdlQBUVQWAagGoBqAbhFagGoBsVoGgaQUGoBQU'.
    'AFAFAAUHnqnNWWnNFFABQUAGgAUHC9ez2aPjKNSOLKqCg0ooNAoPZbneoiUVsFABQeHadfoW/8AdIPAqAKACoAAICCsggIIgqAyCAyoyAAAAAAgAAAAAgAAAAAAALT6QOiAAAAAAAAAAAAAAA'.
    'AADlXa76fkDkDNddFunfrmKaY75B8nV7YqqzRpuzT/AKk8/h0B8yZmZzPGZ5yCAgIACAgJVETGJ5A8GrtzRdszHo736wK+moogK+jRGKKfBpzaUABHWxTvXaY+KK+jArUIOlurulUdVQRVUVB'.
    'qAbgGoRWoBqAbgG4FagRoVUGgaABQUAUABQYu1Yp8VjNcWmQFBQUAFBQUHnvXvy0/GUtakcoZaURQaUUGgURRXfTTzp+KUdxVABQfI1le/qa+kdmPgI4qKAACoAIoiKgICAgiSKyCSDIIoyAA'.
    'AAAAAgAAAAAgAAAAAALR6QOqACAAAAAoAIAAAAAAAACg8uqu0UxO5xu/y+IPzWsu6qu7/iOccqe74A84AICAAmQQEyCA4aifOWvH9liV7BpQWOaD6Lo5qACoj06KntVVfAV7BWkFB2oq7pVGw'.
    'AagGoBqAbhFagGoBuBWoEbgVYQagGhVEUAFAFAAUHC5VmrwaYrKooAKCgoKADhevZ7NPLvlGpHFlpoRQUGlFBQURQdLU4rgV6kVQUGa6tyiqvpGQfEzniqAKAACoIoIIKgMiArIiCoDIICAii'.
    'CAoAAAAAgAAAAAAAAgAALR6QOqCAAAAAAAAAAAoAAAAM110URmqcA8d3V118KOzT/MHAHO9Yt36d25HhPfAPkarR3LE5njb7q/3B58ggICZBAAQEB5tVPnLPj+yxK+gKCt2485T4oV9B0cwAR'.
    'UHv0lOLWevEad4QaBQaB0pnKo2DUA1ANQK3CDUA1ANwK0DQNINAoqiKKogAKAoJXVinKpXnaYAUFBQAUFBwvXs9mnl3yjUjjDLSiNAqiwDQKCgoigoPXTOaYlGmgAefaFe7p9315x+oPlqigA'.
    'AoCCKCKgjIqAiiIIoyggIDIIAIAAKAoAAgAAAAAAAAgAALT6QOiAAAAAACgAAAAAAAA817WU08Lfanr3A8dVdVc5qnMggAAExExiYzE84B8zV7NmnNyxxp76O/4A+cCAmQQAEBAeTWT52x737'.
    'LEr6YoiuunjN6lYle5tgBRFRX06Kd2mKekCtoKDUAoNA6UzlUbBuAahFagG4BqAaFbgGgWEGgaBQAUAUABQcb1XHHRqMaYVAFBQUFBQee9ez2aeXfLLUjkiqCwo0CgoNCKCgAoKD0aeezMdEW'.
    'Ooqg+dtKvN2mj1Y+qpXkAAABUAEBAQVAQEBlURFQEBkEBAAAAAFABAAAAAAAAAAABAWj0gdcIICgAAAoAIAACgAA5Xb1Fv0p49AeK7qK7nsp6QDkAAAAAADyavZ9F/t0dm717p8QfGu27lqua'.
    'LkbtUAwCAgJMgA8Wunztj3v2WJX1hoQd9JHnfCFylextgEVB1sU712mFV9FlVBoGgUGgWAdaeKo6QDUIrUA3ANQDUA0K0DUINQKoiigigCgKBM4jIjzc+LbACgoKACg4Xr2ezTy75ZrUjiitA'.
    'oNKKCgoigoKCgoKDpZnFfiK9KKA+Lfr8perq6zwVliBVAAFVEQAEFQEEZFQEVEFRBkEkRJBBQAAAAAAAAAAAAAAAABRAao9KEHVAAAAAAAAAAABJmIjM8IB5L2t7rX/IHkmZnjPMAAAAAAAAA'.
    'HLUae1qKN25HhPfAPiavRXdNOZ42+6uP1B5gSZBAMg8O0J87p/e/WFiV9hGlB6NH6VU+xrLOnqaZURUV6dFT26qukYFe2EFBqAUGgUGoBuAdaVG4QagG4BqAagGhWkGoBQUFBQBQAFBzvVflW'.
    'M6cmmVBQAUFUee9e3uzT6PfLFakckVQaUUGgURYBQUFBQUFABYB64nMZRpjUV7liur2cAfGVkBRQUBURABUBAZEQVBEUZFRBAQEAAAABAAAAAAAAAAAAAAFAFo9KEo6oAAAAAAAAAAON7U27X'.
    'D0qugPDdvV3ZzVPw7gYAAAAAAAAAAABJppqjdqjMTziQfI12yqqM3NPxo77ffHgD5gICA8O0Z87p/en6wsSvtI0oPVo44VS1GdPQ0wqCqr3aOnFrPWUV6EGgaBQUGgagGoB0pB0gG4BqBWoEb'.
    'gFFaQagGgUAFAFAAUHnqnM5bc0BQUFAB5717e7NPLvlm1qRzRVBYBpRQURQaBQUAFBQUFAB6LM5px0RqPPtKvFumj1pz8hK+cqAAKNAioICCoCAgjIqAiiAiCAgIAAAACAAAAAAAAAAAAAAAA'.
    'tHpA6oAAAAAAAAJXcoojNU4gHhvayqvhR2af5g84AAAAAAAAAAAAAIADw67ZdvUZrt9i9/KfEHxLtu5armi5Tu1R3A5g8G0p87pven6wsSvuo0A9mkjzfjLUY07NMqiqo+pbp3aIp6QyrYNQC'.
    'g0CgsA2DUA3ArcA6QDcA1ANQDUINKNIKCgoAoACgxdqxT4rGa4tMqCgAoPPevb3Zp9HvllqRyRWgVRoFBQURQUGgAUFBQAUFB0szivHUWPFtCve1Ex3URgK8wgACigKggICCoIyCCoIiiCogg'.
    'ICAAAAgAAAAAAAAAAAAAAAALR6UA6oKAAAAAADzXtZTRwo7VXXuB4q66q5zVOZBkAAAAAAAAAAAAAAEABQcNVpLOpo3bse7V3wD4Gt0F/S1drtW59G5HL4g+NtP73Te9P1pWJX30aAe7TxizS'.
    '3GK6jKqrpYp3rtMe0H0mVaBYBoFBQagGoBuBW4BuAbgG4BuAaBqEGgUGgAUAUABQcLlWavZDUYrKooKCg8129vdmn0evVlqRzRVBpRQaBYBRFBQUFBQUFABQAUEmuKImueVPan4A+f5TyvnfX'.
    '7XzVQABAAAQQAVkQBkEFQEUZBJQQAEAAUAAAEEAAAAAAAAAAAAABaPSgHZAAAAABzu3rdqO1PHoDw3tVcu8PRo6QDiAAAAAAAAAAAACAoAIAACggJVTTXTNNURNM84kH5b7R7FrorsX9LxtU1'.
    'TNVHfHLl1WJXrRoB9C1GLdMextzrYKo9OhpzXVV0j6oPciqDQKDQLANA1AOkCtQDUA3ANwDpAKDUINA0KoigACgKDNc7tKxK4NMKCgA8929vdmn0fqy1I5oqg1CigoNCKCgoKCgoKACgoAKAD'.
    'w7aveR2dc9avsR8f6LlNfh4Nl3d/SRHfbnd/ZdGb/AI9iNAACAAggqAgiAkgiqygiiIiCoCAAAKAAAACCAAAAAAAAAAAAAtHpQDsgAAAkzEcZ4QDyXtb3Wv8Al+wPJNUzOZ4yCAAAAAAAAAgK'.
    'ACAAAAAAoIABVVTTG9VOKY5zIPmarblmjs6ePKVetyp/qD8xtzW6rUXtN5W5M0zVPYjhTzp7liV9tGlB9GmMRDbm0oA9+ipxaz60or0Qg1AKDQKDQNQDcA1ArcA1ANwg1ANwo2g1ANAoKCgCg'.
    'AKDjdnNWOjUYrCooKDz3b292afR+rLUjkitKKDQKIoKDQKCgoAKCgoAKACgA+F9pb3as2I7s1z9Ibyxt49j3d2/VanlXHDxg0mH2GHUUAEAAERUBBEBkVAQEUZBEAEAAAAAUAAAARAAAAAAAA'.
    'AAABaPSgHZAABxvam3a4c6ukA8N2/cuz2p4dAcwAAAAAAAAQAAAAAAAAFABASqqKY3qpxT3zIPm6rbdmjs2I8pV60+j/UHydRq9RqJzdrmelPdHwFcBHztq/faX3p+tKxK/RI01TGao8VH0Wn'.
    'JVUB9S3Tu0U09IZV0BoFBoFgGgagG4BqBW4BqEG1GoQaBuAbBQUGgABQFAmcRkR5va2woKI8127vdmn0fqy3I5oqqNAoNCKCgoNAA0ACqKgAoKAACgCvyW1r/AJbaF6vuidynwp4Okcdfl5rF'.
    'zyV6i5H5ZyqR+l58Y5OTuoAIAACIqAgjMggqAyCKICIAIAAAAAAAoAIAAAAAAIAAAAAC0elAOyCVVU0RvVTiAeK9raquzb7NPXvB5QAAAAAAQAAAAAAAAAAAAACqqKY3qpxTHOZB8zVbbs0Zp'.
    '08eUq9b8v8AUHydRq9RqZzdrmelPdHwBxFQQB87an32l96frSsSv0aNN2Yzdp8VSvoNMCjpYp3rtMe0H04ZVqAUGgUGoBQagHSBWoBuAagGoQbgGoFagG4EaBQUAUABQc7s/lajNc1ZAee7e3'.
    'uFPo/Vm1qRzFUGgUFEUGgUGgAUFBQVQQUAFABQAc9Teixp7l6fyUzP7KV+KmZnjPOebo4gPv7Nu+V0dHWnsT8HOuufw9SNAAICAAyioIgrIIIiiSKgIgAgAAAAAAAAAAAAAAAAAAIAADVHpQD'.
    'F7WUUcKO1V/JB4a7ldyc1zmQZAAAAABAAAAAAAAAMggKAACTVFMb1U4pjnMg+dqttWaM02I8pV635f6g+RqNXf1FWbtcz0p7vkDiACAAgPnbV++0vvT9aViV+kGnXTR56CJXubYAerRU5uTV0'.
    'j6or3INAoNAoKDUA1ANwK3ANQDcA1CDYLANwKojUA0CgACgKDzzOZy25gPNdu7/CPR+rNakcxWoBQURoFBoFBQUFBQAaAABQAUAFAFfL+0N7c0MW++7Vj4RxlrLG35ptzQH09iXcXLln1o3o+'.
    'DOm8PsMOiAAgICAgIgzIIKgIoyCAIIoAIKAAACAAAAAAAAAAAAAgAM13KLcZqnEA8dzV1XKt2nhR/MowgAAAgKCAAAAAAAAAAgAKACTVTTG9VOKY5zIPnanbVqjNNiPKVet+X+oPk6jVX9ROb'.
    'tWelPd8gcQAQAEBAAfN2r99pfen60rEr9KjTvpI85PguUr2NsKD3aKnFre9aUV6oQUGoBQWAaBqAbgVqAbgGoBqAbhBoGoBqBWgUGoEUAUBQYuz2cdVjNcWmXmu3t/hHo/Vm1qRiBVBoFEUGg'.
    'UGgUFBQUAFUVABQAUAAFFUH5v7R39/WU2o5Wqf51cW8uW3yWmUB20l3yOpt3O6J4+E8JSrH6VzdgEBAQEBkBBkVkAGQRREEAUAEAFABAAAAAAAAAAAAAQAHmva2mns2+1V17lHiruVVzmqcyI'.
    'lHpQUjsyoACAAAAAAAAAgAAAAKCTMUxvVTiI5zIPnanbVqjs2I8pV635f6g+TqNVf1E5u1Z6U93yByABAQAEABAQV87an32l96frSsSv0qK9OjjjVLWWdPU0yoPqWqdy3TT0hlXQGgUFBoFBu'.
    'AbgVqAbgGoBqAbhBoGhWgUFBQagQFAUHC5Vmc90NsV5Lt3f4R6LKyMQKoNAoKIoNAoNAoCioKCqAKgAoAKAACigPxmsveX1V2969UzHh3fydHCuCgAD9Hob3ltJbr78Ynxjg512n4ehlUUQEB'.
    'kEBARFZURBFEBEEAUEAFAABAAAAAAAAAAAAAc7t63ajtTx6d6jwXtVcu8PRp9X91RwBAat+nCUjuyoCAoIAAAACAAAAAAATMUxmqcRHOZB87U7Zs2+zYjylXrflB8rUaq/qJzdqz7O75A4gAA'.
    'gIACAAgAqA+dtT77S+9P1pWJX6VFevRx2Kp9rUZ09DTLpZp37tNPtB9RlWgagFBYBoFgG4BuBWoBqEG4BqAagGoFagRqBVBoAFBQUGblUU0TKpXzrt7f4R6IkjAqg0IsA0Cg0CgoKooKCgoAK'.
    'gAoAAKACigjy7Tv+Q0F6uOe7u0+NXBYmvw/HujkAAgPrbDu8Llmffj6Sxp0w+sy2gICAyCAgJKDIqAijIIgAKCCgAAAAAAAAAAgAAAJMxEZmcQDx3td+W1/y/ZUeSapmczxnqozkRBURGrX3k'.
    'FWPQyoCAAAAAAgAAAAAJVVERmqcRHfIPBqdsWaM02I8pV1/L/UHytRqr+onN2rPs7vkDiCAgKCAgAIACAAgoD5u1fvtL70/WlYlfpkV7dLHmfjLcY07qj06GnN2avVj6or3wgoNAoNREzy4g6'.
    'Rauzyoq+Ug6U6TUz/lVfIHWnQ6r/TFdI2fqekR8QdI2df60g6Rs2568J0bjZ099f8AIXjUbPj15+QNxobfrSDUaK11kGv7JZ9vzBr+zWegL/Z7PqgvkbXqoL5K36sCnk7fqwqL5Oj1YQXdp6Q'.
    'o5XIpmcYjAMeTo9WPkC7lHqx8gXdp6QC7sdIA3Y6QBux0Bd2OkAbtPSANynpAG5R0gDydHqwB5O36sfIQ8jb9WPkB5G16sAnkLXqwB5C16oH9ntdBeJ/ZrXQTh/ZbXtBP7Lb6yB/ZKOshw/sk'.
    'esHE/sn8R04f2Wr1jpxP7LX1hTj5e3tFq71m3ZtbvPeq445clzWdR8KdibSj/Lif90N+0c/Wuc7I2lH+RPwwdPWsVbO2hHPT3PkdOOdWl1NPOzX/AMZB12fVcsay3VVTVETO7VmJ5TwKs/L9E'.
    '5uqIICSoyCAgIDMoIqsgiCAgKoIKAAAAAAAAAAACAA43tVbtcPSq9WP1VHgu37l2e1PDp3COSqmREBMgmQas/eQlWPSyoAACAAAAAZAABJqiIzVOIjnMg+fqdsWqOzYjylXrcqf6g+XqNVf1E'.
    '5u1Z6R3fIHIEABAAAQEBAAQAEFAAfN2r99pfen60rEr9vR9ntsV/8AjzT70xH1lFfT032a2j5KmKtynrmrP0iWus2PVT9mb0+lfpjwiZ/Zepx7tJ9nbdqmd69VOekRCdXj107G0kc5rn4ocda'.
    'dl6KPyZ8ZkXjpGh0kcrVIOlNizTyopj4QDeIBQAUFABQVAUUAFAQUAAAAEqnEZFcuaoAoALgAAFAABQAAAUAAAAAAFAAAAB4dTO9en2cFSuWBEwBgF4gmAe2jFVEThGibVqfyR8gYnTWP9OAZ'.
    'nRaafyfUGJ2fpp7p+YMTsyx3TVAMTsqjuuT8gYnZU91z+QMTsq73V0/zBznZep7t2fiDnOzdZ6n84BidDrI/ypBznTaiOdqr5Ax5OuOdMx8JUQBBQAAAAAAAAAAAZrroop3qpxAPDf1tVXC32'.
    'aeveqPKIiiIIozkEyCA1Z+9j/7uSrHrZVAUAEAAABAUEmqmmM1TiOsg8Gp2vao4WY8pV1/KD5d/VX785u1Z/h7vkDiACAAAgAICAAgAICCgAJ9QeTaGh1129pfJae7X2p4xRVj8vsWI/teEV0'.
    'iOCouAdojEQCguAAMAoGAUAFABQUAFAQUBRUAAAEkVzuz3A5xwB0VAFABQAAAUAAAAFAAAAAABQAAASeEZ6A+fPGc9VRMAYAwBgEwD0aeezNPRFjsgKIACAAgAGARBMAqiAbsTzgGJsWZ526Z'.
    '+EIrM6PSz/lU/IGJ2do5/y/lMqjM7L0k91UeEgxOyNP3VVQDE7Ht91yr5QDM7Gnuu/wAv6gzOx73dXT/MGJ2TqetM/EGZ2XrPVifjAMzs/WR/l/QGJ0erj/KqB5tROot8KbNdVXuzhR827Gpr'.
    'neuUV59tMiOU5jnGBGcqJkEyCZBMgyCTINWPvaf/ALuSrHsZUAAAAABAJmKYzVOIjvkHg1O17NHZsx5Srr+UHy7+qv35zdqz0ju+QOQIACAAAmRTMCERNXKM+AN06XV1ejYuT4UVfsDtRsjat'.
    'foaS7P+39xXaj7N7bq/8Wqn3piP1B3p+yO2qvSot0eNcfpkHej7F6+fTv2qfDen9IB3o+xH+pq/+NH7yD0UfYrZ8enevV/8Y+kA9Nv7J7Eo52qq/frmfpgHpt7D2Rb9HSW/jG9/2yD1W9NYt/'.
    'd26aPdpiAY1Wd2PiD7GAdMKixHEHYAAFwAACgAoAKgKKACoAKAAKAoICA4zxnIJgFjgDoqAKAAACgAAAAAoAAAAAAAAAAOeonFufbwB48KgAABhAwo3ZnFyPbwQelFFEABAAAQAEwgKCKYVBA'.
    'AFAABBQQAAASZiOYrnVVM+AjPFRAMR0BibNqedFM/CAYnR6Wedm3P+yP2BidnaGeent/8YBidk7Nnnp6AYnYmy5/8en51fuHGJ2Dsqf8AJ/8AaTpxifs7sqfyVf8AOTpxKPs3syK4mIriffB1'.
    '/u/oetfzQT+72j9e584BP7vaT/Uufy/YE/u7pf8AVufy/YE/u5pv9a5/6/sB/dzT/wCtX/IE/u7pv9av+QMVbD0sejeuTPhSDw3/ALJ2L85u6u9PSnsRH0By/uVs/wD173/r+wNf3L2b/rXv/'.
    'X9gX+5uy++u7/yj9gaj7HbH7/Kz/v8A6A1H2R2JH5Lk/wD9JBuPsrsSP8iZ8a5BuPs1sOP/ABKZ8Zq/cHSnYOx6eWkt/LP1FdI2TsynlpLP/Cn9gdKdHpafRs248KIj9AdNymOURALiQMAmAM'.
    'AYBMAYAwBgDAOGqp7PwkH2IgHTCo1RHEGwVAwoIKoAAoAAKCoAKAACgCgAIADNfLAOeAMAYBY4A2qKAAACgAAAAAAIAAKoAICgAgA8+pnjFKlccCGATAGAMAYAB6o4xnqiqoiAoIIoAAiAomE'.
    'UAEMCmAMAoGATAGAMAYAwDFVXQGFQwCAYAwCYAwBgEwBgEwBgFpjig2AABgEBiq5EcuIOVUzVzBnAGAMAmAMAYFMCJgUwBgEwBgDdAwBgEwBgDAGAMAYBMAYBw1Udn4SD7ERxBvCo3TANAIAK'.
    'BgBRQMAAoCCgAoAAoCgCIKAA51cZBkFAABYBtUAAEFUAEBQQAFAAAAABAAAAB5bk5rlRnAGBDAGAMAmAMA7WZ7OOgroggCgACICggKJgBFAAAAMAAAAAzMxAMTMyImFDAJgDAGAMAmAMAYBMA'.
    'YBMAYBaY4oN4AwBgHOq5HdxBzqmqeYM4AwBgDAJgDApgDAGATAGAMAYAwCYAwBgDAGAMAmAMAYAwBgHHUx2PhIPrRHEG8KjcQCoGAMKCCgYABVABBQABQFAAAABAUEq5A5gYAAABcAsA0qACA'.
    'AACgAAAAAAAAAAKAJVOKZlB5cKGAMAYAwBgEwBgG7XCrxB2QAQBQQQUAEMAYFFREDAGBTAAAAAMTUDOFQAwACAYAwAgihgDAJgDAGATALTHFBsGJqjuBznMgmAMAYBMCmATAGAMAYAwBgEwBg'.
    'DAGAMAYBMAYAwBgDAJgDAGAMAYBx1Mdj4SD68QC4VGwXCBgADAAApgRQAAUAUABQAAQAAAGauYJgDAAAGAAAagFEAAAAAAUAAAAAAAAAAHO76OAccKGAMAYAwBgEwBgDkD0IoAICoAIAgoAAA'.
    'AAABgDAMzIM8xEwAABhRMAYAAwCYAwgYUMAmAMIGFEwgm9GeAE5kEwCYABMCmAMAYAwCYAwBgDAGATALgEwBgDAGAMAmAMAYAwBgDAGAN0DdBx1MdifCQfViAaiBGhQAQFAAUQFMAAoAAAAAA'.
    'AAAAAMAAYAAABcAYABYBRAAAAABQRQAQABQABQEBzucahGMKGAMAYAwCYAwBgEwDrR6KK0AACAAAAYAwBgEAAAA4AzMgzhUMAYAwgYUMIJhQwBhAwBgEwoYAwBgDCDEzCjE5kCI4oNYFMAYBM'.
    'AYAwBgDAGAMAYAwCYAwBgDAGAMAYBMAYAwBgDAGAMAYA3QN0EwDlqI83PhIPqRANRAhgFwKAAAAAAAAoAAAAAAAAAAJIIAAAAAAAABgFBQAAAAAAAAAAAAAAAcp4yqGAMAYBMIGAMAYUMAmAa'.
    'o5orYAAAAIAAAAAAADMyCCJgDAGAMAYFMAYEMKJgDAGAMIGATAGFEmQYnMgmAMARHFFawBgDAGATAGAMAYAwBgDAGAMAYBMAYAwBgDAGAMAYA3QN0DdBN0DdA3QMAYBy1FPm6vCQfTwCgAAYA'.
    'wAAAAACgAAAAAAAAAAAgAAAAIAAACgAAoAAAAAAAAAAAAAAJPIGMKhgDAGEEwBgABQwgYURB0FAAAAAAAAAQEmcAgJgDALgDAhgUwCYAwBgDAGBDAGAMCpgEkGZyqJgDAGATCCxHEVcAYAwBg'.
    'DAGIAxAG6Bugm6BugboG6BugboG6BugboG6BugYAwBgEwBgDAGAMAboG6DlqKfNVeEg+jgFAAABAAAAAAUAAAAAEAABQAQDAGAMAYAwBgAAAAAAAAFAAAAAABAAAAAASQTAGAMAYAwBgDAhgD'.
    'AJgDANRyFAAAAAAMAYABmQZwC4BcAYAwAAAABgEwBgDAGAMCICCpgDAhgDApgRMAuBV3QMAboJugboGAMAYAwBgDdA3QN0DAGAMAYBMAboGAMSBiQMSBiQMAYBMAYAwBgHO/HmqvdkHuAAAAA'.
    'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAMAYAwBgDAGAMAYAwBgDAAAAAAAAAAJgEwBgDALgDAGAMAYAwBgDAGAMAYBAMAboJgDAGAMAYA3QN0DdAwBgDAGAMAYAwBgEwBgD'.
    'AGAMAYAwBgDAGAMAYBMAYAwBgDAGAN0DdAwBgHO/T5qv3Z+gPUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAY'.
    'AwBgDAGAMAYAwBgDAGAMAYAwBgDAGATAGAMAYAwBgDAGAMAYAwBgDAGAMAmAYvU+Zr92foDsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'.
    'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADF77mv3Z+gNgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'.
    'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxe+5r92foDYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'.
    'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM1071FVPWJgGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'.
    'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'.
    'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'.
    'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'.
    'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'.
    'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/2Q==';
}
//
?>